关于js中变量的作用范围
2017-02-07 17:13
337 查看
在问答中偶然看到一个问题发现原来没有注意到这个细节
不使用var 定义的变量是全局变量^-^,所以一定要使用var
本来d和e都应该是全局变量的,但是d在上一层作用域中已经定义了,系统赋值的时候会先,从底层作用域一级一级往上找,找到的话,就对其赋值,没有找到的话,就会声明一个全局变量(这是不用var 定义变量的情况下)
所以在d赋值的时候实际上是t1里面的局部变量赋值(不在window下),而e的话就会声明为全局变量。全局变量实际上都是window对象的属性。
补充一下使用var 的话,就是直接声明一个局部变量,如果这个局部作用域已存在同名变量,就等同于赋值
全局变量虽然是window的属性,但是和window.xxx声明的还是有一些不同,虽然都可以通过window.属性名(或全局变量名)来调用,
但是只有window.xx声明的全局变量,才可以通过delete window.xx来删除属性。
不使用var 定义的变量是全局变量^-^,所以一定要使用var
本来d和e都应该是全局变量的,但是d在上一层作用域中已经定义了,系统赋值的时候会先,从底层作用域一级一级往上找,找到的话,就对其赋值,没有找到的话,就会声明一个全局变量(这是不用var 定义变量的情况下)
所以在d赋值的时候实际上是t1里面的局部变量赋值(不在window下),而e的话就会声明为全局变量。全局变量实际上都是window对象的属性。
补充一下使用var 的话,就是直接声明一个局部变量,如果这个局部作用域已存在同名变量,就等同于赋值
全局变量虽然是window的属性,但是和window.xxx声明的还是有一些不同,虽然都可以通过window.属性名(或全局变量名)来调用,
但是只有window.xx声明的全局变量,才可以通过delete window.xx来删除属性。
相关文章推荐
- 关于JS变量的作用域,作用域链与闭包
- js变量,及作用范围
- js变量作用范围vs php变量范围
- 关于js里面的变量范围
- 关于JS变量和作用域详解
- 关于js语法中的一些难点(预解析,变量提前,作用域)
- php变量作用范围
- 群聊天时学习到的两个JS知识(变量范围,Foreach顺序)
- 关于JS变量声明的小细节
- 【Js】声明变量中var和作用域关系
- c#出错:当前上下文中不存在名称xxx,变量超出作用范围
- Perl中的变量作用范围 local, my, our与全局变量
- LINQ表达式中关于显式范围变量的Bug
- 【转】js变量以及其作用域详解
- 关于Js变量地址引用的问题
- [转]javascript 变量的作用范围
- 关于namespace或global作用域内变量和常量以及static修饰符
- php学习之 认清变量的作用范围
- 变量的作用范围,构造函数,引用和对象
- 工程中的变量作用范围 static(待补充)