2

私はEloquentJavaScriptBookを読み進めており、その中に次のコードがあります。

function createFunction(){
  var local = 100;
  return function(){return local;};
}

createFunction()を呼び出してノードコンソール(コマンドプロンプトからノードを実行)からこれを実行すると、[Function]が戻り値として取得されます。しかし、本によると、私は100を取得する必要があります。

だから私の2つの質問:これはなぜですか?次に、ノードコンソールでこれらの小さな例を実行することは、JSコードをテストするための悪い考えですか?

4

3 に答える 3

4

の応答を呼び出す必要がありますcreateFunction()

createFunction()();

最初の呼び出し(())はcreateFunction()、内部関数を呼び出して返します。2番目の呼び出しは、内部関数を実行して、local閉じられた変数を返します。

環境を知っている限り、ノードコンソール(またはその他)で小さな例を実行することは問題ありません。たとえば、ブラウザのコンソールは一般的に'dであり、オブジェクトのプロパティだけでなく、変数を明らかにeval()削除する方法などの副作用を引き起こす可能性があります。 。delete

于 2012-04-26T00:30:58.187 に答える
3

それ自体が関数である100の戻り値を呼び出すことによって取得します。createFunction

createFunction()();

...またはおそらくもっと明確に...

var new_func = createFunction();

new_func();

function createFunction(){
  var local = 100;

 //  v---v-----------------------v return a function from createFunction
  return function(){return local;};
}

  //  v------- the returned function is assigned to the new_func variable
var new_func = createFunction();

 //   v------- the returned function is invoked
new_func();
于 2012-04-26T00:31:13.017 に答える
0

同様の問題がある場合は、double()を完全に見逃したため、呼び出しはcreateFunction()()のようになります。

于 2012-04-26T00:31:16.943 に答える