extextscript对象无效

问题描述 投票:0回答:1

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. [对象静态文本]2. JavaScript错误!对象无效...

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

extendscript
1个回答
0
投票
    首先执行myalert(),您会看到“你好”警报。
  1. 然后myalert()完成,并且wsw(在myalert()本地)一起被删除。
  2. 然后您尝试在全局范围内访问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)在控制台上转储对象    
  • © www.soinside.com 2019 - 2024. All rights reserved.