7

この方法で関数を呼び出すことは理にかなっています。

print(square(5));  
function square(n){return n*n}

しかし、次の呼び出しが機能しないのはなぜですか?

print(square(5));  
square = function (n) {  
  return n * n;  
}  

「平方 = 関数 (n)」の形式を使用することに固執する場合の解決策は何ですか?

4

6 に答える 6

12

「通常の」関数宣言はスコープの先頭に引き上げられるため、いつでも使用できます。

変数宣言も巻き上げられますが、割り当てはその特定のコード行が実行されるまで行われません。

したがって、スコープ内var foo = function() { ... }に変数を作成している場合foo、それは最初はundefinedであり、後でのみその変数に無名関数参照が割り当てられます。

「後で」がそれを使用しようとした後である場合、インタープリターは不明な変数について文句を言うことはありません (結局のところ、既に存在します) が、undefined関数参照を呼び出そうとしていることについては文句を言います。

于 2012-05-29T22:05:33.257 に答える
0

関数式では、他の値と同じように関数を使用していますが、次のことを期待しますか。

print(a);
var a = 5

働くために?(私は本当に尋ねていません)

于 2012-05-29T22:07:29.340 に答える
0

2番目のケースでsquareは、は(再)割り当ての対象となる通常の変数です。検討:

square = function (n) {  
  return "sponge";  
}  
print(square(5));  
square = function (n) {  
  return n * n;  
}  

ここに出力が表示されると思いますか?

于 2012-05-29T22:07:54.003 に答える
0

順序を変更する必要があります。宣言して割り当てる前に変数を使用します。

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));  
于 2012-05-29T22:07:06.970 に答える