javascript定义全局变量的时候有var和没有var的区别

首先讨论的范围是在浏览器端的javascript

在平常我们定义一个全局的变量 代码如下:
  1. var x = 2;
  2. y = 3;
  3. console.log(x); //2
  4. console.log(y); //3
  5. console.log(window.x);//2
  6. console.log(window.y);//3
复制代码
可以看出x,y都挂在window下,成为window的一个属性。 这时操作:
  1. delete x;  //false
复制代码
  1. delete y;  //true
复制代码
这个时候就看到了定义一个全局变量有var和没有var的区别了,即通过var创建的全局变量无法使用delete删除。 那么到底是为什么呢? 在我不使用var定义变量的时候,变量的特性configurable的值为true,可以使用delete对其操作。 使用var定义一个全局变量的时候,变量的特性configurable的值为false,不可以使用delete对其操作。 可以通过下面的代码验证之:
  1. Object.getOwnPropertyDescriptor(window, 'x'); //Object {value: 2, writable: true, enumerable: true, configurable: false}
复制代码
  1. Object.getOwnPropertyDescriptor(window, 'y');//Object {value: 3, writable: true, enumerable: true, configurable: true}
复制代码

还有的区别是:

示例代码如下:
  1. alert(a);var a = 2; //undefined
复制代码
  1. alert(a);a = 2; //ReferenceError: a is not defined
复制代码
从上面的两段代码分析: var声明的全局变量在javascript代码中会"代码提升"(hoisting), var a = 2被分解为var a; a = 2; 代码parse(解析)的时候var a;会被提升到代码的最前面 ,这个时候 a 为 undefined。在执行到 a=2;的时候再对a 赋值。第二段代码变量没有使用var声明,没有提升,在alert(a)的时候a没有被定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值