我正在阅读这本书 JavaScript:The Complete Reference,Third Edition By:Thomas Powell; Fritz Schneider 对这些概念有详细的了解。
范围规则
在函数或对象之外,无论是否使用var显式定义,变量都在全局空间内。在函数或对象中,如果使用var语句,则定义的变量将是构造的本地变量;没有声明,它将是全球性的。
通常,JavaScript开发人员对使用var的范围规则进行假设并不完全正确。例如,在for循环中找到的var语句不会将该值范围限定为循环。在这种情况下,如果它位于函数或对象之外,则它的范围是它所在的函数或全局空间。
为了看看会发生什么,我这样编码,
当我在Eclipse IDE中按 Ctrl + Space 以显示JavaScript提议时,为什么我能够在函数外部访问变量jLocal?
根据作者描述:
例如,在for循环中找到的var语句不会将该值范围限定为循环。在这种情况下,如果它位于函数或对象之外,则它的范围是它所在的函数或全局空间。
答案 0 :(得分:6)
因为您的代码底部有:
...
jLocal = jLocal + j; // defined not in any functions
...
使其全球化,但不必定义。
答案 1 :(得分:2)
不是本地功能的情况。 myFunc是全局的,就像变量jLocal一样(尽管名称)。由于提升,假定jLocal在父范围之上声明。
仔细观察,有两个变量名为jLocal。 myFunc的一个本地和全局范围的隐式。
想要小费?
将"use strict";
放在var global1 = true;
之前。 HTML 5实现将能够捕获并显示您的错误。