adobe - "var"是什么时候解析的?

标签 adobe adobe-indesign extendscript adobe-javascript

有时 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.avar 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.avar a 指的是两个不同的对象。结果将是:

a: undefined
a: 2
$.global.a: 1

所以问题从来都不是 var 有时会被提前解析,有时不会。问题是文件除了全局范围外没有其他范围。

关于adobe - "var"是什么时候解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906488/

相关文章:

air - 在Ubuntu 13.10上安装Adobe air安装时出现“Gtk-WARNING: Unable to locate theme engine in module_path: ” murrine错误”

javascript - InDesign : Check if cancel button is clicked on a dialog

extendscript - 如何通过编码 UTF-8 将文本写入文件?

javascript - After Effects 应用预设 : bad path

forms - 如何在 Business-Catalyst 登录页面中制作“记住我”按钮?

android - 适用于 flex : how do I delete all the application data? 的 android 版 adobe air

javascript - 在 InDesign 中将 XML 元素链接到页面项目

javascript - 通过名称的一部分在 InDesign 中引用文本框架

javascript - Adobe Air 共享数据库文件

javascript - 如果 scriptUI 调色板打开,为什么 InDesign 会失去所有键盘功能?