JavaScript中的变量范围(Dojo)

时间:2010-09-24 20:28:04

标签: javascript dojo scope

我开始玩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”有什么影响,我认为无论如何都是隐含的?

感谢。

2 个答案:

答案 0 :(得分:4)

var定义当前范围内的变量。如果你在函数内部(事件处理程序是函数),它定义一个仅存在于该函数中的局部变量。如果您在函数之外,它会定义一个全局变量。

在分配给不存在的变量时离开var总是定义一个全局变量。我个人更喜欢使用var在全局范围内定义所有全局变量,或使用window.foo来访问它们,使其显式我想使用全局变量,并且我没有离开{ {1}}意外出局。

答案 1 :(得分:-1)

哦,我会非常不清楚地回答这个问题,我会得到一些帮助。对我来说,我认为var会重置范围,因此它只适用于同一范围内的其他人。

我认为有趣的是当你在一个更大的范围内定义一个var时会发生什么,然后在一个内部范围内重新定义它,将一个内部的那个重新定义,然后返回到外部范围。我不知道答案,我确定有很多边缘案例,但我认为这是一个很有吸引力的学习场所。