2016-02-27 61 views
-2

這裏是我的代碼片段:訪問的JavaScript變種以上嵌套函數

function doSomething() { 
    var clipId; 
    funtion doSomethingElse(clipId) { 
     this.clipId = clipId; 
    } 
} 

但是,這並不工作,因爲this點窗口對象,clipId不是一個全局變量,它被定義在doSomething函數中。

我知道我可以改變,我傳遞給第二個函數的參數的名稱,因此,例如,我可以在第二function.But更改名稱的clipId參數來clipId1,然後就去做clipId = clipId1,我不要那樣。我希望var和參數具有相同的名稱。

+1

*我想var和參數具有相同的名稱。 *。爲什麼?更基本上,我看不出你怎麼能夠調用'doSomethingElse',因爲它不能在'doSomething'之外訪問。 – 2016-02-27 17:22:15

+0

爲什麼你需要有一個相同的變量名?'doSomethingElse '在'doSomething'範圍內,爲什麼你需要傳遞一個已經可用的'clipId'? –

回答

2

我不認爲有一種方法可以在不更改任何名稱的情況下做到這一點。如果使用局部變量從父作用域中映射變量,則變得無法訪問。

0

您可以使用setter。

function doSomething() { 
    var clipId; 
    function setClipId(value) { 
     clipId = value; 
    } 
    function doSomethingElse(clipId) { 
     setClipId(clipId); 
    } 
} 

但我想你希望有一些語法允許做這些沒有那些額外的結構。然後,正確的答案是Matti's one imo。

+0

當然,但你已經去了所有這些麻煩,以適應是由OP提出的完全無意義的條件,這是他莫名其妙地想要故意使用相同的名稱來映射變量。 – 2016-02-27 17:27:28

+0

OP的實際需要可能發生在更復雜的環境中。如果我想爲他的案例闡述一些更好的解決方法,或者我給出可能適合他的一些答案,我可以問他更多的背景。我不認爲這個片段恰恰反映了他的實際情況。 –

+0

對。我們已經要求更多的背景,但他還沒有回答。我們等等吧。 – 2016-02-27 17:37:11

0

由於JavaScript中的「關閉」,您根本不需要參數。 這將工作:

function doSomething() { 
    var clipId; 
    funtion doSomethingElse() { 
     this.clipId = clipId; 
    } 
} 

因爲doSomethingElse()訪問在其範圍內的變量(在這種情況下,doSomething()的變量clipId