扩展脚本对象无效

时间:2019-12-05 06:14:26

标签: extendscript


InDesign脚本问题。
我知道需要用var写什么。我只是想了解会发生什么...
有我的脚本:

function myalert(s){
    var w = new Window('palette')
    ws = w.add('statictext',undefined,s)
    w.show()
    $.sleep(1000)
    w.close()
}

myalert('hello')
alert(ws)

警报:
1. [Object StaticText]
2. JavaScript错误!对象无效...

问题:为什么会这样?为什么警报后出错?我们已经从内存中删除了吗?那为什么我看到警报?还没删除?那为什么我看到错误?

1 个答案:

答案 0 :(得分:0)

  1. 首先执行myalert(),您会看到“你好”警报。
  2. 然后myalert()完成,wsw(在myalert()本地)一起删除。
  3. 然后,您尝试在全局范围内(被删除后访问ws)并获取错误。

请参阅:

var w  = 100 // global

function myalert(s){
    var w = new Window('palette') // local (shadows 100)
    ws = w.add('statictext',undefined,s) // global
    w.show()
    $.sleep(1000)
    w.close()
    alert('In myalert() w = ' + w)
    alert('In myalert() ws = ' + ws)
}

myalert('hello')
alert('Global, w = ' + w)
alert('Global, ws = ' + ws)

如果您不使用var,则wws都将保留在全局范围内:

function myalert(s){
    w = new Window('palette')
    ws = w.add('statictext',undefined,s)
    w.show()
    $.sleep(1000)
    w.close()
    alert('[myalert] w = ' + w)
    alert('[myalert] ws = ' + ws)
}

myalert('hello')
alert('[global] w = ' + w)
alert('[global] ws = ' + ws)

PS。您也可以使用$.writeln('ws = ' + ws)

在控制台上转储对象