Я много раз читал строгий режим JavaScript, а некоторые говорят «отключить с утверждениями». В прошлом я видел все это, катаясь на лошади и наблюдая за цветами, и проходил мимо, потому что я редко использую это утверждение в обычное время, так что это не имеет большого отношения к себе. Сегодня я не могу не задаться вопросом, почему «строгая модель» не может терпеть утверждение?
В спецификации ECMASCRICT говорится, что «с оператором используется для установки объема кода в определенном объекте». Можно видеть, что с оператором изменяется цепочка областей.
function Person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}(function(){var title = 'Applicant:';var zhangsan = new Person('Zhang San',20,'male');var str = '';with(zhangsan){str = title+name+', age'+age+'years,'+sex+'sex'+', позиция '+job;} console.log (str);}) ();Приведенный выше код будет сообщать о Uncaught ReferenceError: работа не определена.
Если вышеупомянутый блок операторов изменяется на
str = title+zhangsan.name+', age'+zhangsan.age+'лет,'+zhangsan.sex+'sex'+', позиция'+zhangsan.job;
Ошибка нет, вывод: заявитель: Zhang San, 20 лет, мужская, неопределенная позиция
Для переменных в блоке операторов при выполнении вы должны проверить, находятся ли их свойства в Zhangsan.
Мы знаем, что при запуске сценария есть два процесса, которые необходимы, сначала компиляция, а затем выполнять.
Очевидно, что при компиляции невозможно определить, какие свойства обладает объектом, представленным этой переменной Чжансана. Можно только определить, что Чжангсан является примером человека при выполнении. Следовательно, не может быть правдой, что переменная в блоке операторов является свойством Чжангсана или переменной в предыдущей цепочке с объем переменной во время компиляции.
Это противоречит тому факту, что переменная определяется при составлении строгого режима, поэтому строгий режим не позволяет существовать. Следовательно, нетрудно понять, что оператор с отключенным в строгом режиме.