2014-11-14 53 views
0

小提琴得到arguments對象here的JavaScript:回調

我期待在做一些非常高的水平的邏輯爲輔助函數爲了好奇。我希望能夠在_if函數中使用其參數執行函數,而不必事先定義類似_callback的內容?我覺得我在這裏錯過了一些東西。

var _if = function(predicate,callback){ 
    if(predicate){ 
     callback(); //callback(arguments) is not arguments for callback 
    } 
}; 
var text = 'some text'; 
_if(1 > 0,function(){ 
    console.log('hello world'); //hello world 
}); 
_if(1 > 0,function(text){ 
    console.log(text); //undefined 
}); 
//define callback for this situation 
var _callback = function(x){ 
    console.log(x); 
} 
_if(1 > 0,function(){ 
    _callback(text); //some text 
}); 

回答

1

不是你想要知道什麼,但也許這會有所幫助:

你可以叫你的函數像這樣太:

_if(1 > 0,_callback.bind(null,text)); //null is the value of this 

_if(1,function(text){ 
    console.log(text); //this way not undefined 
}.bind(null,text)); 

1)這工作,因爲JavaScript的logic的。在進一步的版本中,你可以使用你的版本太多,如果你使用let text = 'some text'; - ref

2)null是函數,(更多信息here)的這個值,但我認爲你可以通過this太多,如果你需要使用它的功能(null將在非嚴格模式全局對象被自動替換這就是爲什麼你可以使用window.colsole.log裏面的功能 - 。ref

+0

我正在尋找一種方法來獲取'_if'函數中的回調函數的參數對象,而無需事先定義_callback。在第二次調用_if時,你可以真正看到我想要做什麼。當我傳遞參數給回調函數時,該函數打印未定義。 – wootscootinboogie 2014-11-14 15:36:00

+0

你可以綁定參數的功能,讓我展示它... – 2014-11-14 15:38:12

+0

謝謝,這就是我一直在尋找。兩個問題:1)爲什麼這個工作,2)爲什麼傳遞null而不是'this'?作爲背景? – wootscootinboogie 2014-11-14 15:45:47

1

爲什麼不直接接受的參數給回調函數作爲額外的參數上_if

var _if = function (predicate, callback, context) { 
    if (predicate) { 
     var callbackArgs = [].slice.call(arguments, 3); 
     callback.apply(context || null, callbackArgs); 
    } 
}; 

// Usage: 
_if(true, console.log, console, "text"); 
+0

,因爲我知道這種方式會工作,我正在尋找原因,爲什麼我沒有看到我問了什麼:) – wootscootinboogie 2014-11-14 15:50:52

+0

爲什麼傳遞null在上下文應用? – wootscootinboogie 2014-11-14 15:51:23

+0

你沒有指定你想要一個調用上下文。你可以很容易地爲上下文獲得第三個命名參數,並將'slice'參數改爲3,這就行得通了。通過對你的參數列表進行一些聰明的思考,你甚至可以找到一種只需要一個函數的方法(這可以推斷出調用上下文是否被傳入)。 – 2014-11-14 15:53:07