Adobe 什么时候是;var";解析?

Adobe 什么时候是;var";解析?,adobe,adobe-indesign,extendscript,adobe-javascript,Adobe,Adobe Indesign,Extendscript,Adobe Javascript,有时var会影响前面的代码,有时则不会。举个例子: base.jsx: $.global.a=1; $.writeln(“a:+a”); var a=2; 运行此命令将打印a:1。运行$.evalFile(“base.jsx”)还打印a:1。然而,运行 (函数(){ $.evalFile(“base.jsx”); })(); 打印a:undefined 为什么??这背后的逻辑是什么?经过一系列测试,我发现了这一点 我知道JavaScript的作用域是函数级的,但我假设文件也有自己的作用域。我

有时
var
会影响前面的代码,有时则不会。举个例子:

base.jsx:

$.global.a=1;
$.writeln(“a:+a”);
var a=2;
运行此命令将打印
a:1
。运行
$.evalFile(“base.jsx”)还打印
a:1
。然而,运行

(函数(){
$.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;
运行代码

(函数(){
$.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
有时被提前解析,有时不被解析。问题是,除了全局范围之外,文件没有其他作用域。

Javascript有很多怪癖,我认为这些怪癖大多是“历史性的”,而不是一些精心设计的思想(只是一些最初实现所做的)。不要试图为Javascript的每一个错误寻找逻辑原因…@Basile我的目标是能够在运行代码之前预测代码的结果。这里是否有ExtendScript遵循的规则,或者只是一组无法由一组规则充分定义的大量怪癖和边缘情况?然后,采用一些编码规则,包括在包含它的函数的开头声明by
var
变量……我找到了“解析”这个形容词非常混乱而且错误。
var
关键字肯定会被解析(因为解析是从左到右的)。重要的是声明变量的作用域。