0
(function() {
  var testFnk = function() {
    console.log(this);
  }

  console.log(window.testFnk);
  testFnk();
})();

このコードの出力は次のとおりです。

  • 未定義

関数内でこれが Window を参照しているのに、window.testFnk のチェックが定義されていない理由を説明できますか?

編集:答えを見ていると、私の質問は明確に述べられていませんでした。私が言いたいこと: どちらの場合も、ログに記録された値が「未定義」でも「ウィンドウ」でもあるのはなぜですか?

4

1 に答える 1

1

非厳密モードでは、thisデフォルトwindowでブラウザーランドに設定されるためです。厳密モードでは、 になりますundefined

window.testFnktestFnkメソッドをwindowオブジェクトに追加していないため、未定義です。に割り当てることwindowで明示的にこれを行うことも、暗黙的なグローバルを介して暗黙的に行うこともできます(厳密モードでは例外がスローされます、FYI)。

(function() {
  window.testFnk = function() {
    console.log(this);
  }

  console.log(window.testFnk);
  testFnk();
})();
于 2013-02-17T20:11:51.293 に答える