無名関数に引数を渡すと結果に影響するのはなぜですか? たとえば、次のスクリプトは a1 を a として、function()
a2 を配列として示しています。
var a1=(function(){return [1*2,2*2,3*2];});
var a2=(function(v){return [1*v,2*v,3*v];})(2);
console.log(a1,a2);
結果:
function() [2, 4, 6]
無名関数に引数を渡すと結果に影響するのはなぜですか? たとえば、次のスクリプトは a1 を a として、function()
a2 を配列として示しています。
var a1=(function(){return [1*2,2*2,3*2];});
var a2=(function(v){return [1*v,2*v,3*v];})(2);
console.log(a1,a2);
結果:
function() [2, 4, 6]
a1 への割り当ては匿名関数を作成するだけで、実際には実行しないためです。
a2 への割り当ては、実際に呼び出すために後で括弧を追加したため、関数の作成と実行を同時に行います。
同等のコードを作成するには、次のようなものが必要です。
var a1=(function(){return [1*2,2*2,3*2];})(); <-- note the extra parens
var a2=(function(v){return [1*v,2*v,3*v];})(2);
console.log(a1,a2);
コードの最初の行は関数を呼び出しません。
書き込みvar a = function() { ... }
は、関数自体を に割り当てますa
。
2行目は、他の関数呼び出しと同じように、を使用して関数を呼び出します(2)
。