2015-02-12 77 views
0

我很難繞過這個想法。假設我有以下如何訪問作爲Javascript中參數的函數的參數

var func1 = function(func2){ 
     return func2 
    } 

var addTwo = function(x) {return x + 2}; 
var two = func1(addTwo(2)) 

console.log(two) // returns 4 

如果我想將代碼添加到func1是指addTwo參數(S)或任何其他的功能,我選擇作爲參數,我會怎麼做呢?我想訪問func1中的函數參數的參數。我希望這是有道理的。

+0

你的「func1」將返回它傳遞的任何東西,無論是函數還是字符串「hello world」。當你調用它時,你的「addTwo」函數將返回「4」,所以這就是「func1」返回的結果。 – Pointy 2015-02-12 00:48:30

+0

如果我想通過僅以func2作爲參數調用func1來控制console.log func2的參數,該怎麼辦? – theamateurdataanalyst 2015-02-12 00:52:43

+0

你爲什麼想這樣做?你想解決什麼問題? – Pointy 2015-02-12 00:53:52

回答

0

你可以這樣寫。

var func1 = function(val, func2){ 
     return func2(val); 
    } 

var addTwo = function(x) {return x + 2}; 
var two = func1(2, addTwo); 

console.log(two); // returns 4 
0

我想這可能是你想要什麼:

function log_and_call(func, args) { 
 
    args = [].slice.call(arguments, 1); // Get arguments except first 
 
    console.log(args); 
 
    return func.apply(this, args); 
 
} 
 
var addTwo = function(x) {return x + 2; }; 
 
log_and_call(addTwo, 2); // Logs [2] and returns 4 
 
var multiply = function(x, y) { return x * y; } 
 
log_and_call(multiply, 3, 4); // Logs [3, 4] and returns 12

arguments是包含傳遞給當前函數中的所有參數列表的特殊變量。這使用slice來跳過func的說法,並得到其餘的。

您不能稱之爲log_and_call(addTwo(2)),因爲當您編寫addTwo(2)時,它會調用該函數並返回其值,並將該值傳遞給log_and_calllog_and_call無法介入該調用或查看其結構,它只是得到結果。