2016-04-09 71 views
0

我正在閱讀優秀Eloquent Javascript的第5章。JS:.apply(null,arguments) - 爲什麼我的函數調用一次,而console.log調用很多次?

我想了解.apply函數。

JavaScript函數有一個應用方法。您將它傳遞給一個參數的數組(或類似數組的對象),然後它將使用這些參數調用函數。

給出的例子是:

function transparentWrapping(f) { 
    return function() { 
    return f.apply(null, arguments); 
    }; 
} 

想出來我自己,我寫了這個:

function doIt(f) { 
    return function(arg) { return f.apply(null, arguments) }; 
} 

doIt(console.log)("Hello there!","Hi!","Hello!!", "Testing"); 

輸出是:

Hello there! Hi! Hello!! Testing 

但是,如果我爲我自己的功能調換console.log:

function logIt(arg) { 
    console.log(arg+"\r"); 
} 

doIt(logIt)("Hello there!","Hi!","Hello!!", "Testing"); 

......它似乎只爲第一個參數調用logIt()函數。輸出是:

Hello there! 

爲什麼console.log調用每個參數,但logIt只爲第一個?

回答

1

console.log不是調用每個參數。它只是一個函數,它對每個傳遞的參數都做了一些事情。它只被調用一次。

console.log("Hello there!","Hi!","Hello!!", "Testing"); 

如果它被多次調用:

console.log("Hello there!"); 
console.log("Hi!"); 
console.log("Hello!!"); 
console.log("Testing"); 

...那麼輸出會把每個字符串在單獨的行。

logIt另一方面,您只能通過第一個參數進行任何操作。

logIt("Hello there!","Hi!","Hello!!", "Testing");