js 中带var和不带的区别

在全局作用域下声明一个变量,也相当于给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位置 (这种机制查找: 作用域链)也就是我们在私有作用域中操作的这个非私有变量,是一直操作别人的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值