2012-04-04 71 views
2

我努力做到以下幾點:JavaScript的匿名函數與參數從調用()

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    alert(response); 
}); 

響應爲undefined,我希望它是"hello"。任何想法爲什麼?

+0

你寫了「print response」,但是print不存在於javascript中。 – mpm 2012-04-04 06:42:11

回答

4

call第一個參數應該是對「this」的引用。作爲「你」想要執行你的功能的上下文。 Call function Mozila MDN

+0

謝謝你的回答。 – Justin 2012-04-04 06:44:47

+1

您可以省略.call部分,只說this.callback(「hello」)。你可以省略所有的綁定,直接使用回調參數作爲回調(「hello」)。 – nnnnnn 2012-04-04 07:08:24

1

您寫道:

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    print response; 
}); 

打印犯規在JavaScript中存在。

然後你寫this.callback.call,這是不對的

你應該寫

callback.call(this,"hello") , 

只是檢查通話功能簽名。

+0

因爲bind()和綁定包含回調的對象,實際上需要'this'。需要使用bind(),因爲在回調函數觸發ajax事件時,傳入的參數'callback'將會超出範圍。 – Justin 2012-04-04 06:47:12

+0

@Justin - 當ajax回調運行時,main()函數的回調參數仍然可以訪問,儘管main()將由then_完成,但由於閉包的魔力,_even。試試看看... – nnnnnn 2012-04-04 06:53:33