2014-11-02 47 views
0

我有以下功能:如何調用裏面的函數,你可以通過這個訪問參數?

function outer(){ 
    index = 1; 
    inner(); 
} 

function inner(){ 
alert(this.index); 
} 

我想看看1警報。另外我想要那個函數內部沒有參數。

可能嗎?

+0

'this'是用於訪問對象的屬性,而不是訪問本地變量。除非將所有變量放入對象並傳遞對象引用,否則JavaScript不提供通過對象引用訪問局部變量的方法。 – jfriend00 2014-11-02 23:44:32

回答

5

您可以手動Function.prototype.call

function outer() { 
    this.index = 1; 
    inner.call(this);  
} 
+0

但是如果inner有一個參數,它就不起作用。你能以這種方式提出建議嗎? – gstackoverflow 2014-11-02 23:46:48

+0

你想要傳入內部? – 2014-11-02 23:50:37

+0

「調用」函數與使用正常語法調用它不同。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call - 您可以在這裏看到一個工作示例:http://jsfiddle.net/r77gg0t4/ – Fiddles 2014-11-02 23:52:22

0

調用函數時,如果定義了outer()功能範圍之外的index變量指定的背景下,這將是提供給兩種功能。

var index = 0; 

function outer() { 
    index = 1; 
    inner(); 
} 

function inner() { 
    alert(index); 
} 

outer(); // alerts "1" 
0

您可以使用應用函數的對象,這將控制方面:

function blarg() { 
    var self = this; 

    self.outer = function(){ 
     self.index = 1; 
     self.inner(); 
    }; 

    self.inner = function(){ 
     alert(self.index); 
    }; 

    self.outer();  // Call it in the constructor 

    self.go = function() { 
     self.outer();  // Or in another function 
    }; 
} 

var blargObj = new blarg(); 
blargObj.go(); 
+1

您的代碼只適用於您將索引添加到全局對象。您會發現,在瀏覽器中執行代碼時,window.index = 1,並且從新blarg()創建的上下文沒有索引屬性。 – 2014-11-02 23:54:48

+0

謝謝@Steven。總是要小心,假設「這」實際上是什麼。 – Fiddles 2014-11-03 00:10:05

相關問題