在全局作用域下声明一个变量,也相当于给window 全局对象设置 一个属性,变量的值就是属性值(私有作用域中声明的私有变量和window 没啥关系)
/* console.log(a);// undefined
console.log(window.a);//undefined
console.log('a' in window);// true
//在变量提升阶段,在全局作用域中声明了一个变量A,此时就 已经把A当作属性赋值给window了,只不过此时还没有给A赋值,默认undefined
//in 检测某个属性是否隶属于这个对象
var a =12;// 全局变量值修改, win的属性值也修改
console.log(a);//12
console.log(window.a);// window的一个属性名a 12
a =13; console.log(window.a);// 13 window.a=14;
console.log(a);//14
全局变量中WIN中的属性存在 "映射机制"*/
不带
不加var 的本质是win 的属性
已a=12为例子:
console.log(a);//变量提升机制 Uncaught ReferenceError: a is not defined at
console.log(window.a);//undefined
console.log('a' in window);//false
a=12;//=>window.a=12
console.log(a);//12
console.log(window.a);//12
var a =12
b=13;// 这样写B是带var的 console.log(a, b);
私有作用域中 带var 和不带也有区别 带 var 的在私有作用域变量提升阶段,都声明为私有变量 和外界没有任何关系
2.不带var 不是私有变量 ,会向它的上级作用域查找,看是否为上级的变量,不是,继续查找,一直 找到window位置 (这种机制查找: 作用域链)也就是我们在私有作用域中操作的这个非私有变量,是一直操作别人的。