Предыдущие слова
Eval и с с ним часто не нравятся, как будто их существование является ошибкой. В CSS таблицам не нравится, и используются только таблицы для отображения данных на веб -страницах, а не на макете, могут быть отклонены как нерегулярные и чрезмерные корреспонденты. Так в чем же ситуация о Eval и с? Эта статья введет функцию eval () и с помощью заявления подробно
оценка
определение
eval () является глобальной функцией. JavaScript использует eval () для объяснения работой строки, состоящей из исходного кода JavaScript.
var result = eval ('3+2'); console.log (result, typeof result); // 5 'число'Использование
eval () имеет только один параметр. Если пропущенный параметр не является строкой, он непосредственно возвращает этот параметр. Если параметр является строкой, он будет компилировать строку как код JavaScript. Если компиляция не удастся, исключение синтаксической ошибки (синтаксис) исключено. Если компиляция является успешной, код выполняется и возвращается значение последнего выражения или оператора в строке, и если последнее выражение или оператор не имеют значения, оно в конечном итоге вернет неопределенные. Если строка бросает исключение, исключение передает вызов eval ()
var num = 1; var str = 'test'; console.log (eval (num)); // 1 -anconsole.log (eval (str)); // referenceerr: test не определяется var strlong1 = 'var x = 1; var y = 2;'; console.log (eval (strlong1), x, y); // undefined 1 2var strlong2 = '= 1; x ++; '; console.log (eval (strlong2), x); // 1 2
Объем
eval () использует среду с объемом переменной, которая называет ее. То есть он ищет значение переменной и определяет работу новой переменной и функции и кода в локальной области.
var b = 2; function foo (str, a) {eval (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Псевдоним
При вызове через псевдоним eval () выполнит свою строку в качестве глобального кода высшего уровня. Выполненный код может определять новые глобальные переменные и глобальные функции или присваивать значения глобальным переменным, но не может использовать или изменять локальные переменные в функции.
var geval = eval; var x = 'global', y = 'global'; Функция f () {var x = 'local'; eval ('x += "изменил";'); return x;} function g () {var y = 'local'; geval ('y += "изменение";'); return y;} консоль[Примечание] IE8-вызовы браузера eval () через псевдоним и вызовы eval () обычно один и тот же результат.
побочный эффект
Интерпретатор JavaScript выполняет много анализа и оптимизации кода. Проблема с eval () заключается в том, что код, используемый для динамического выполнения, обычно не анализируется, поэтому интерпретатор не может его оптимизировать, что приведет к деградации производительности
Аналогично eval () settimeout (), setInterval (), new Function () и т. Д. Эти функции могут выполняться динамически, когда программа запускается с использованием строк в качестве параметров. Преимущества этого механизма выполнения не могут компенсировать его потери производительности, поэтому вы должны попытаться избежать его использования.
Строгий режим
Поскольку функция eval () слишком мощная, строгий режим строго ограничивает ее
【1】 переменные или функции не могут быть созданы через функцию eval (), но их значения могут быть запрошены и изменены
«Используйте строгое»; eval ('var x = 1;'); console.log (x); // referenceerror: x не определено строгое '; var x = 1; eval (' x = 2; '); console.log (x); // 2【2】 Невозможно использовать Eval в качестве идентификатора
'Использовать строгое'; var eval = 10; // syntaxError: непредвиденная оценка или аргументы в строгом режиме
с
Цель определения с помощью утверждений - упростить работу по написанию одного и того же объекта несколько раз.
Оператор с использованием объекта добавляет объект к головке цепочки применения, затем выполняет оператор и, наконец, восстанавливает цепочку областей в своем исходном состоянии.
с (Object) {ratement;}эффект
Когда уровень гнездования объекта глубокий, с операторами обычно используются для упрощения написания кода. По сути, он обрабатывается путем обработки ссылки объекта как сфера применения и использования атрибутов объекта в качестве идентификаторов в области, создавая тем самым новую лексическую область применения
В клиентском JavaScript выражение, подобное следующему, можно использовать для доступа к элементам в HTML -форме
document.forms [0] .address.value
Если такое выражение появляется несколько раз в коде, вы можете использовать оператор WAT, чтобы добавить объект Form к верхнему уровню цепочки объема
с (document.forms [0]) {name.value = ''; address.value = ''; emai.value = '';}Этот метод уменьшает много ввода без необходимости префикса Document.forms [0] для каждого имени свойства. Этот объект временно установлен на цепочке областей. Когда JavaScript необходимо проанализировать идентификаторы, такие как адрес, он будет автоматически искать в этом объекте.
[Примечание] Оператор с сочетанием сочетания для чтения свойств объекта, но оно не может создать свойства объекта
Если объект o имеет атрибут x, то следующий код присваивает значение атрибута 1
var o = {x: 0}; с (o) x = 1; console.log (ox); // 1Если атрибут x не определен в O, следующий код точно такой же, как и код x = 1, который не использует оператор с. Это связано с тем, что запрос LHS выполняется на переменной x и 1 назначается ему
var o = {}; с (o) x = 1; console.log (ox); // undefinedConsole.log (x); // 1побочный эффект
Подобно eval, код JavaScript оператора с оператором очень трудно оптимизировать, и это также вызывает трудности при отладке кода. Он медленнее, чем код, который не использует оператор с.
Более того, если утверждение с неуместным, оно может вызвать утечку переменной и загрязнять глобальный объем.
var x = 1; var o = {}; с (o) {x = 2;} console.log (x); // 2console.log (ox); // не определеноСтрогий режим
В строгом режиме использование операторов запрещено
// SyntaxError: Код строгого режима не может включать в себя a с оператором строгого '; var o = {}; с (o) {x = 2;}наконец
Использование EVAL и с помощью делает невозможным для двигателя оптимизировать поиск по объему сбора во время компиляции, что приводит к снижению производительности и более медленному запуску кода. Поскольку eval и with редко используются в реальной работе, ограничения в строгом режиме мало влияют на нас. Точно так же, как Министерство иностранных дел однажды выпустило объявление о том, что наша страна больше не будет выдавать визы на Ямайку. Хотя мы слышали о Ямайке, большинство людей могут не поехать туда один раз в своей жизни, так что это не имеет значения. Точно так же не имеет значения, не нравятся или нет.
Выше приведено подробное объяснение резюме обучения JavaScript, о котором редактор, введенный вам, является презираемой функцией Eval и с примерами утверждений. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!