2015-11-12 44 views
5

今天我的問題是問我將如何訪問函數內的函數。所以,例如,我有一個按鈕,如果我點擊它,它會提醒。事情是,如果你有一個圍繞這個函數的函數,帶警報的內部函數將不會提醒。如何訪問函數內部的函數?

下面是一個例子:

HTML:

<button onclick="doStuff()">Alert</button> 

JS:

function nothing() { 

var doStuff = function() { 
    alert("This worked!") 
} 

} 

所以doStuff()功能是行不通的。有人能幫我找到一種方法來訪問它嗎?謝謝。

+0

爲什麼函數需要在另一個函數內? – EkcenierK

+1

你根本不能。 'doStuff'只在'nothing()'內部可見。 –

+0

'nothing'(包括'doStuff')中的代碼只有在你調用'nothing'時纔會運行。所以你必須這樣稱呼它。然後你可以通過返回或者將其賦值給另一個範圍中定義的變量等方式來使'doStuff'可用。但是我認爲你希望'doStuff'是'Nothing'的一種方法,而不是它的一部分內部代碼。 – Oriol

回答

1

@Joseph the Dreamer最終是正確的,但是如果你在調用一個嵌套在另一個函數中的函數時死了,你可以使用OOP方法。

創建一個JavaScript 「類」 對象和範圍的功能, 「這個」:

function Nothing() { 
    this.doStuff = function() { 
     alert("works"); 
    } 
} 
  • 接下來需要添加一個ID,您的按鈕,
  • 與click事件偵聽器沿

然後,在您的點擊事件中,您可以像這樣在Nothing「Class」函數中調用doStuff:

var object = new Nothing(); 
object.doStuff(); 

https://jsfiddle.net/me7fek5f/

+0

哦,我明白了你的使用對象編程。這是我能做的事情。多謝兄弟。 –

+0

不是問題,讓我知道如果你卡在所有 –

+0

是的,所以我想用按鈕切換遊戲 –

1

你不能。那是因爲它被包含在你無法真正訪問的範圍內。您可以訪問它的唯一方法是將其展示在nothing之外的某個位置。

0

這是一個功課題嗎?

你可能會要求做這樣的事情:

function nothing() { 
    var doStuff = function() { 
    alert("This worked!") 
    } 
    var yourButton = getYourButton(); 
    attachClickListener(yourButton, doStuff); 

getYourButton和attachClickListener的實現都留給讀者。

+0

不,我編碼的遊戲,雖然我試圖訪問函數內的函數 –