有时 var
会影响它之前的代码,有时不会。举个例子:
基础.jsx:
$.global.a = 1;
$.writeln("a: " + a);
var a = 2;
运行此打印 a: 1
。运行 $.evalFile("base.jsx");
也会打印 a: 1
。然而,运行
(function() {
$.evalFile("base.jsx");
})();
打印a: undefined
。
为什么?这背后的逻辑是什么?
最佳答案
经过大量测试,我明白了。
我知道 JavaScript 的作用域是函数级的,但我曾假设文件也有自己的作用域。我错了。
运行
$.global.a = 1;
var a = 2;
$.writeln("$.global.a: " + $.global.a);
将打印 $.global.a: 2
。这意味着 $.global.a
和 var a
在这个上下文中是完全一样的东西,文件的作用域实际上是全局作用域。
鉴于 base.jsx 仍然是
$.global.a = 1;
$.writeln("a: " + a);
var a = 2;
运行代码
(function() {
$.evalFile("base.jsx");
$.writeln("a: " + a);
$.writeln("$.global.a: " + $.global.a);
})();
将 base.jsx 的范围更改为此函数而不是全局对象。突然 $.global.a
和 var a
指的是两个不同的对象。结果将是:
a: undefined
a: 2
$.global.a: 1
所以问题从来都不是 var
有时会被提前解析,有时不会。问题是文件除了全局范围外没有其他范围。
关于adobe - "var"是什么时候解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906488/