JavaScript中的范围规则

时间:2014-11-18 14:18:30

标签: javascript

我正在阅读这本书 JavaScript:The Complete Reference,Third Edition By:Thomas Powell; Fritz Schneider 对这些概念有详细的了解。

  

范围规则

     

在函数或对象之外,无论是否使用var显式定义,变量都在全局空间内。在函数或对象中,如果使用var语句,则定义的变量将是构造的本地变量;没有声明,它将是全球性的。

     

通常,JavaScript开发人员对使用var的范围规则进行假设并不完全正确。例如,在for循环中找到的var语句不会将该值范围限定为循环。在这种情况下,如果它位于函数或对象之外,则它的范围是它所在的函数或全局空间。

为了看看会发生什么,我这样编码,

Global & Local Variables

当我在Eclipse IDE中按 Ctrl + Space 以显示JavaScript提议时,为什么我能够在函数外部访问变量jLocal?

根据作者描述:

  

例如,在for循环中找到的var语句不会将该值范围限定为循环。在这种情况下,如果它位于函数或对象之外,则它的范围是它所在的函数或全局空间。

2 个答案:

答案 0 :(得分:6)

因为您的代码底部有:

...
jLocal = jLocal + j; // defined not in any functions
...

使其全球化,但不必定义。

答案 1 :(得分:2)

不是本地功能的情况。 myFunc是全局的,就像变量jLocal一样(尽管名称)。由于提升,假定jLocal在父范围之上声明。

仔细观察,有两个变量名为jLocal。 myFunc的一个本地和全局范围的隐式。

想要小费?

"use strict";放在var global1 = true;之前。 HTML 5实现将能够捕获并显示您的错误。