2016-04-09 8 views
0

私は第5章を通して素晴らしいEloquent Javascriptを読んでいます。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 

、I場合私自身の機能のためにconsole.logを交換:

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

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

... logIt()関数は、最初の引数に対してのみ呼び出されるようです。出力は次のとおりです。

Hello there! 

はなぜ各引数のために呼ばCONSOLE.LOGされているが、ロジットのみ最初のために?

答えて

1

console.logは、引数ごとに呼び出されるではありません。渡された各引数で何かを行う関数です。一度だけ呼び出されます。

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

それが複数回呼び出された場合:

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

...その後、出力は1行に1つの文字列を入れてしまうでしょう。

logItは、最初の引数を持つものだけを渡します。

logIt("Hello there!","Hi!","Hello!!", "Testing"); 
関連する問題