第四章:执行环境与作用域
基本类型与与i引用类型的值
基本数据类型(按值访问,可以操作保存变量值实际的值)
Undefined
Null
Boolean
Number
String
引用类型(不能直接操作变量的值不能直接访问内存中值,是通过引用访问的)
复制保存对象的某个值操作的是对象的引用,但是给对象添加属性时操作的是对象
传递参数
js中所有的函数是按值传递的也就是说吧函数外部的值复制给函数内部的参数
var obj={
name:'hxq',
age:22
}
var obj1=obj;
function fn(obj) {
obj.name='222'
console.log(obj)
};
fn(obj1); //{name: "222", age: 22}
console.log(obj)//{name: "222", age: 22}
函数中对象的值是按值传递的
!(function () { //对象的按值传递or按引用传递在函数中 function setName(obj) { obj.name = 'hxq'; // var obj1=obj; // obj1.name='csa'; obj = {};//直接操作obj操作的是传的值 obj.name=222; } var obj = {}; setName(obj); console.log(obj.name) ; //hxq })()
!(function () { /*检测类型*/ /*typeof 所用引用类型的值都是Object的实例 * instanceof * */ console.log([] instanceof Object); console.log({} instanceof Object); })() !(function () { /*执行环境与作用域链 * 执行环境定义了变量或函数有权访问的其他数据每个执行环境都有一个与之关联的变量对象、 * 环境中定义的所有变量和函数都保存在这个对象中(window) * 某个执行环境中所有代码执行结束后,保存在其中的所用变量与函数定义也随之被销毁(例如函数内部的执行环境) * 全局执行环境知道用用程序退出例如关闭网页或者浏览器 * 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境会被推入一个环境栈中,函数执行结束后,栈将环境弹出, * 把控制权交给之前的执行环境 * 当代码在一个环境中执行的时候,会创建变量对象的一个作用域链 * */ })()