2011-12-25 18 views
7

私は "厳密に"使用しようとしています。作業の指示、および少しのトラブルがあります。次のファイルでは、FireFox 9は、someVarが3行目で宣言されていないことを(正しく)検出しますが、19行目でtheVarが宣言されていないことを検出できません。なぜこれが当てはまるのか分かりません。「厳格な」(JavaScript)が宣言されていない変数を検出しないのはなぜですか?

"use strict"; // this will cause the browser to check for errors more aggresively 

someVar = 10; // this DOES get caught // LINE 3 

// debugger; // this will cause FireBug to open at the bottom of the page/window 
     // it will also cause the debugger to stop at this line 

    // Yep, using jQuery & anonymous functions 
$(document).ready(function(){ 
    alert("document is done loading, but not (necessarily) the images!"); 

    $("#btnToClick").click(function() { 

     alert("About to stop"); 
     var aVariable = 1; 
     debugger; // stop here! 
     alert("post stop " + aVariable); 

     // this lacks a "var" declaration: 
     theVar = 10; // LINE 19 // this is NOT getting caught 

     // needs a closing " 
     // alert("hi); 
     console.log("Program is printing information to help the developer debug a problem!"); 
    }); 

}); 

答えて

7

エラーがスローされる前にハンドラを呼び出す必要があります。つまり、#btnToClickをクリックします。

例のフィドル:それは変数のスコープに来るときhttp://jsfiddle.net/X3TQb/

+0

サイドノートとして、リンターを介してコードを解析できるエディターを使用すると、編集時にこれらのエラーが発生します。個人的に、私はSublimeLinterと組み合わせたSublime Text 2を使用して、JSHint http://www.jshint.com/で報告されたエラーを強調表示します。 –

+0

Nuts!私は実際にこれを数回試したことを誓って、Firebugからまったく何のエラーも受けなかった。 私は戻ってきてもう一度試しましたが、今はエラーがFirebugコンソールで報告されています(ただし、クリックされた場合のみ)。 JSLintは、それを1回のパスで報告します(つまり、メソッドが呼び出されるのを待たずに)。 ありがとう! – MikeTheTall

+1

答えに解析時間と実行時エラー報告の違いを指摘することがあります。これがここでの重要なコンセプトです。 – wewals

1

Javascriptがちょっと面白いです。このコードを実行する前に別のコードを実行すると、変数が宣言されている可能性があります。エラーが発生しないため、実行時以外は欠落している変数にエラーが発生しにくいです。

関連する問題