2016-07-20 11 views
1

を呼び出す私は、次の自己呼び出す関数の構文を発見した:未知の引数は、関数

var data = (0, foo)(); 
function foo(){ 
    return "a"; 
} 

しかし、私はここに0(ゼロ)の意味が何であるかを取得しませんでした。誰もそれを私に説明することはできますか? ありがとうございます。

+3

'(foo)()'が同じことを達成しているので、この例ではゼロは何もしません。 '(" hello "、foo)()'、 '({}、foo)()'もそうです。ただし、[*カンマ演算子*](https://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/) – evolutionxbox

+0

を調べる価値があります。正確には、 list-of-statements "は、リストの最後の項目によって返されたものを返します。例えば ​​'x =(2,3、" Hi ")'は '' Hi "' 'x 'に値を設定します。 – techfoobar

+0

この構文は多くのnpmで見たことがあります。それは無価値な場合は、なぜそれを使用するすべての? –

答えて

1

私のopinoinでは、これはcomma operatorの無意味な使用です。

@techfoobarは正しくように述べている:

A「カンマ区切りリスト-文-の」ちょうどリストの最後の項目で返されるものを返します。たとえば、x = (2, 3, "Hi")は、"Hi"の値をxに設定します。

function foo(){ 
 
    return "a"; 
 
} 
 

 
// The following all return 'a' 
 
console.log(('hello', foo)()); 
 
console.log((null, foo)()); 
 
console.log((true, foo)()); 
 
console.log((undefined, foo)()); 
 
console.log((0, foo)()); 
 
console.log((1, foo)()); 
 
console.log(({}, foo)());

1

0この構文は、それはすべてのメンバーを試用版と最後を返しないものを、完全に任意です。この場合

あなたが持っている:(0、FOO) それは

あなたが簡単に呼び出すことができ、関数に0〜0、evalのFOOをevalし、それを返すと)(最後でそれを呼び出します

それとも、それに

をいくつかのステップを作成することができますこれは警告し、その後、fooの

function a() { 
    alert(1) 
} 

(a(), foo)() 
を起動します

、あなたがそれを呼び出すことができますので、これは後で

var f = (a(), foo) 
f() 
それは条件付きのスコープや変数のための非常に特異的に使用することができる

がどの私にはわからないし、関数としてのfooを単に警告して返します

1

私の意見では、コンマ演算子を使った関数呼び出しはプログラミングの習慣かもしれません。それは、私たちが関数呼び出しを行うときに深く考えるためのスペースを私たちに提供します。

(foo)();(0,foo)();のような関数呼び出しの結果は同じです。 しかし後者の方法では、fooが呼び出される前に他に何をするべきかを考えることができます。 0をdoSomething()と置き換えることができます。

+0

私はあなたがお住まいの地域に同意しない、あなたはコメントでこれを解決することができます。しかし、私はあなたの答えが好きだった.. haha​​hha – Magus

関連する問題