Почему «использование строгого» (JavaScript) не обнаруживает необъявленную переменную? - PullRequest
7 голосов
/ 25 декабря 2011

Я пытаюсь получить «строгое использование»; директива на работу, и возникли проблемы. В следующем файле FireFox 9 (правильно) обнаружит, что someVar не был объявлен в строке 3, но не может обнаружить, что theVar не был объявлен в строке 19. Я озадачен тем, почему это так.

"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!");  
    });

});

Ответы [ 2 ]

7 голосов
/ 25 декабря 2011

Вам нужно вызвать обработчик до того, как выдается ошибка. Другими словами, нажмите #btnToClick.

Пример скрипта: http://jsfiddle.net/X3TQb/

1 голос
/ 25 декабря 2011

Javascript довольно забавен, когда дело доходит до переменной области видимости.Если бы вам пришлось запускать другой код перед запуском этого кода, вы могли бы объявить переменные, и не было бы никаких ошибок, и по этой причине трудно генерировать ошибки для отсутствующих переменных, кроме как во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...