[英]javascript anonymous function parameter passing
我有一些javascript代碼(在一個對象中):
toggle: function() {
var me = this;
var handler = function() { me.progress() };
me.intervalId = setInterval(handler, me.intervalTime);
//...More code
}
我是javascript的新手,所以盡我所知,實際上將me
變量傳遞me
匿名函數。 我想知道是否有一種更具說明性的方式呢? 我想要的東西是:
var handler = (function(o) { o.progress();})(this));
但這似乎不起作用......我錯過了什么嗎? 這是“這是語言的工作方式,只需聲明一個局部變量並處理它”的情況嗎?
更新:
我的問題的根源是/我對javascript范圍和閉包的理解不清楚。 我發現這篇文章可以幫助我理解更多。
你可以使用“.bind()”:
var handler = function() { this.progress(); }.bind(this);
新的瀏覽器具有“bind()”,並且Mozilla文檔具有可用於修補舊瀏覽器的可靠實現。
原因
var handler = (function(o) { o.progress();})(this));
不起作用,因為它只是立即調用anon函數,因此立即調用o.progress()
並將anon函數(undefined)的返回值賦給handler
。 您需要從外部函數返回實際函數:
handler = (function(me){
return function(){
return me.progress();
}
}(this));
另一方面,這是等效的,同樣看起來像看起來糟糕的變量一樣糟糕(但仍然有用,特別是如果需要在循環中完成,改變i而不是修復它)。
順便說一句,如果進度功能沒有任何電話this
里面,只是做handler = this.progress
(不含括號)就足夠。
匿名函數可以訪問me
因為它是在外部函數內部聲明的( toggle
函數); 它由外部功能關閉 。
你的handler
函數將由setInterval
調用,它正好傳遞零參數。 這意味着您不能在處理函數本身中使用參數。
我真的想明確地傳遞me
,你可以編寫一個接受參數的函數,並讓該函數返回一個沒有參數的匿名函數,但是它可以訪問creator函數的參數:
toggle: function() {
var me = this;
var handler = (function (o) { return function() { o.progress() }; })(me);
me.intervalId = setInterval(handler, me.intervalTime);
//...More code
}
但這基本上增加了一層重定向,而沒有真正使它更清晰。 除非你在外面拉動創建功能:
function createProgressHandler(o) {
return function() {
o.progress();
};
}
// ...
toggle: function() {
var me = this;
var handler = createProgressHandler(me);
me.intervalId = setInterval(handler, me.intervalTime);
//...More code
}
你有什么關閉。 創建並分配給handler
保留對me
對象的引用。 這是正常的,日常的JavaScript,這就是閉包一般工作的方式。
你試過這樣的函數嗎?
var handler = function(o){
return function(){
o.progress();
}
}(me);
現在你可以打電話:
handler();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.