4

簡単な例は

function a() {
    alert("something");
}

anything.onclick = a; // this is without parentheses

anything.onclick = a(); // this is with parentheses 

2つの違いは何ですか?

そしてもう1つ、同じ関数を定義したが、今回はfalseを返した場合、それは機能しますか?

function a(){
    alert("something");
    return false;
}
4

3 に答える 3

7

違いは、が関数である間a()関数を呼び出すことです。a

console.log( a() ); // false
console.log(  a  ); // function() {...}

a例の2番目の部分を使用したときに技術的に何が起こるかを明確にするために、次のように再定義しましょう。

a = function() {
    return 100;
};

イベントハンドラーを設定します。

anything.onclick = a();

f()関数を呼び出すだけでなく、fその戻り値を返します。そのため、変数またはオブジェクトのプロパティを関数呼び出しに設定すると、関数呼び出しの戻り値が割り当てられます。したがって、上記のステートメントは事実上次と同等です。

anything.onclick = 100;

これは意味がなく、エラーが発生する可能性があります。関数に戻り値がない場合、その戻り値は暗黙的にundefinedです。

a ただし、変数を呼び出さずにに等しい値を設定した場合は、その変数に通常の関数式を設定するのと同じになります。

var a = function() { ... },
    b = a; // b = function() { ... }

bと同じ操作を実行しaます。

したがって、あなたの例では、それが理にかなっているので、最初のものを使用してください!関数呼び出しの戻り値をイベントハンドラーに割り当てる唯一のケースは、関数が別の関数を返す場合です。例えば:

var x = function(xyz) {
    return function() {
        console.log(xyz);
    };
};

anything.onclick = x("Hello World"); // = function() {
                                     //       console.log("Hello World");
                                     //   }
于 2013-01-28T18:08:58.157 に答える
2

参照を割り当てます:

anything.onclick = a; //assigns a reference

あなたの機能では、次のとおりです。

anything.onclick = function() { 
    alert("something"); 
}

メソッドを実行し、返された結果を割り当てます

anything.onclick = a(); //calls the method and assigns whatever is returned.

あなたの機能では、次のとおりです。

anything.onclick = false; 
于 2013-01-28T18:09:12.810 に答える
0

関数の最後の括弧は、js エンジンが関数を実行するための許可です。これを指定しないと、まったく実行されません。

x=a() //これを行うと関数が呼び出されますが、単に「a」を渡すと、関数へのポインタが渡されます

于 2013-01-28T18:10:20.310 に答える