-6

ここで何が起こっているのか教えてもらえますか (Firefox と Chrome でテスト済み)。

クロージャーを返す単純な関数があります。

function say (name) {
  var msg = 'hallo';
  return function () {
    console.log(msg, name);
  }
}

var sayName = say('joe');
sayName();

ブラウザ コンソールを確認すると、期待どおりの結果が得られます。

Hallo Joe

ただし、最後の行を省略してコンソールから sayName() を実行すると、次のようになります。

Hallo Joe
undefined

余分な undefined はどこから来るのですか?

4

1 に答える 1

1

コンソールは、実行中の関数の戻り値を出力します。

関数に return ステートメントを入れるとどうなるか見てみましょう。

return function () {
    console.log(msg, name);
    return "If you run me from console you'll see this line";
}
于 2013-08-16T10:04:18.627 に答える