深入解析Javascript中的变量作用域

在学习Javascript的可变范围之前,我们应该先弄清楚几个要点:

Javascript变量的变量范围是基于其唯一的域链。

Javascript没有块级别。

函数中声明的变量在整个函数中定义。

1、javascript的行动链
首先,看看下面的代码部分:
复制代码代码如下所示:


看看警报(雨);这段代码,在Javascript函数内定义的变量,首先要找到是否下雨,如果内在功能是在雨中定义的变量使用;如果有雨内函数没有定义,Javascript会继续在雨人搜索功能在这段雨变定义,在雨中变的雨人函数的代码没有定义。Javascript引擎将继续上行(全局对象)是否下雨的定义;在全局对象定义雨= 1,那么最终的结果会弹出‘。

范围链:javascript需要查询变量x,第一个对象首先会找到范围链,如果第一个对象没有定义x变量,Javascript将继续查找没有定义的x变量,如果第二个对象不定义,将继续搜索,等等。

上面的代码是在三范围内,链对象:雨人,和窗口。

2。在函数的主体中,局部变量的优先级高于同名的全局变量。
复制代码代码如下所示:


3,Javascript没有块大小。

这也是Javascript比其他语言更灵活的一部分。

仔细看下面的代码,你会发现变量i,j,k是相同的,它们在整个雨函数中是全局的。
复制代码代码如下所示:


4。函数中声明的变量在整个函数中定义。

首先看看这个代码:
复制代码代码如下所示:


以上表明,变量x可以用在整个雨功能,可以被重新编码。由于这一规律,观察到难以想象的结果,观察下面的代码。
复制代码代码如下所示:


这是因为在功能雨,局部变量在整个函数体定义(var x = 'rain-man'is宣布),所以在整个雨功能,全局变量同名的隐藏的原因。the'undefined'is弹出的是局部变量未初始化时先警告(x)执行。

所以上面的雨函数等于下面的函数:
复制代码代码如下所示:
雨(){ var x的函数;警报(x);X = 'rain-man;警报(x);}

5,未由var关键字定义的变量都是全局变量。
复制代码代码如下所示:


对于Javascript新手来说,这也是一个常见的错误,许多全局变量都是无意中留下的。

6。全局变量是窗口对象的属性。
复制代码代码如下所示:


相当于下面的代码
复制代码代码如下所示: