この方法で関数を呼び出すことは理にかなっています。
print(square(5));
function square(n){return n*n}
しかし、次の呼び出しが機能しないのはなぜですか?
print(square(5));
square = function (n) {
return n * n;
}
「平方 = 関数 (n)」の形式を使用することに固執する場合の解決策は何ですか?
この方法で関数を呼び出すことは理にかなっています。
print(square(5));
function square(n){return n*n}
しかし、次の呼び出しが機能しないのはなぜですか?
print(square(5));
square = function (n) {
return n * n;
}
「平方 = 関数 (n)」の形式を使用することに固執する場合の解決策は何ですか?
「通常の」関数宣言はスコープの先頭に引き上げられるため、いつでも使用できます。
変数宣言も巻き上げられますが、割り当てはその特定のコード行が実行されるまで行われません。
したがって、スコープ内var foo = function() { ... }
に変数を作成している場合foo
、それは最初はundefined
であり、後でのみその変数に無名関数参照が割り当てられます。
「後で」がそれを使用しようとした後である場合、インタープリターは不明な変数について文句を言うことはありません (結局のところ、既に存在します) が、undefined
関数参照を呼び出そうとしていることについては文句を言います。
関数式では、他の値と同じように関数を使用していますが、次のことを期待しますか。
print(a);
var a = 5
働くために?(私は本当に尋ねていません)
2番目のケースでsquare
は、は(再)割り当ての対象となる通常の変数です。検討:
square = function (n) {
return "sponge";
}
print(square(5));
square = function (n) {
return n * n;
}
ここに出力が表示されると思いますか?
順序を変更する必要があります。宣言して割り当てる前に変数を使用します。
square = function (n) {//Better use "var" here to avoid polluting the outer scope
return n * n;
}
print(square(5));
正しい方法var
:
var square = function (n) { // The variable is now internal to the function scope
return n * n;
}
print(square(5));