我开始玩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”有什么影响,我认为无论如何都是隐含的?
感谢。
答案 0 :(得分:4)
var
定义当前范围内的变量。如果你在函数内部(事件处理程序是函数),它定义一个仅存在于该函数中的局部变量。如果您在函数之外,它会定义一个全局变量。
在分配给不存在的变量时离开var
总是定义一个全局变量。我个人更喜欢使用var
在全局范围内定义所有全局变量,或使用window.foo
来访问它们,使其显式我想使用全局变量,并且我没有离开{ {1}}意外出局。
答案 1 :(得分:-1)
哦,我会非常不清楚地回答这个问题,我会得到一些帮助。对我来说,我认为var会重置范围,因此它只适用于同一范围内的其他人。
我认为有趣的是当你在一个更大的范围内定义一个var时会发生什么,然后在一个内部范围内重新定义它,将一个内部的那个重新定义,然后返回到外部范围。我不知道答案,我确定有很多边缘案例,但我认为这是一个很有吸引力的学习场所。