2010-09-24 30 views
2

我已经开始使用Dojo进行一些操作了,并且对我遇到的可变范围问题感到好奇。JavaScript中的变量作用域(Dojo)

我有以下代码:

<div dojoType="dijit.form.Button"> 
    <script type="dojo/method" event="onClick" args="evt"> 
     console.dir(lastSelectedItem); 
    </script> 
    Rename 
</div> 

<div dojoType="dojo.data.ItemFileReadStore" url="/js/treeData.json" jsId="ordJson"></div> 

<div dojoType="dijit.tree.ForestStoreModel" rootLabel="Order" store="ordJson" jsId="ordModel"></div> 

<div dojoType="dijit.Tree" id="ordTree" model="ordModel"> 
    <script type="dojo/method" event="onClick" args="item"> 
     lastSelectedItem = item; 
    </script> 
</div> 

如果我离开它,它工作正常。但是,如果将lastSelectedItem替换为“var lastSelectedItem”,lastSelectedItem将在调用console.dir(lastSelectedItem)的作用域中不可见。 “var”在这种情况下会产生什么效果?我认为它无论如何都是隐含的?

谢谢。

回答

4

var限定在当前范围的变量。如果你在一个函数中(事件处理函数是函数),它定义了一个局部变量,它只存在于这个函数中。如果你在函数之外,它定义了一个全局变量。

离开var了分配给一个不存在的变量时,总是定义一个全局变量。我个人更喜欢定义在全球范围内的所有全局变量var,或使用window.foo来访问它们,使之明确,我想使用全局变量,那我不是偶然离开var出来。

-1

哦,我会这么不精确地回答这个问题,我会得到积极的回报。对我来说,我认为var是重置范围,所以它只能在相同范围内的其他人使用。

我觉得有趣的是,当你定义在一个更大的范围变种会发生什么,然后重新定义它的内部范围,猴子与内一个了一下,然后返回到外部范围。我不知道答案,我确信有一些边缘案例,但我确实认为这是一个很好的学习场所。