2010-09-24 83 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是重置範圍,所以它只能在相同範圍內的其他人使用。

我覺得有趣的是,當你定義在一個更大的範圍變種會發生什麼,然後重新定義它的內部範圍,猴子與內一個了一下,然後返回到外部範圍。我不知道答案,我確信有一些邊緣案例,但我確實認爲這是一個很好的學習場所。