2015-10-29 2 views
4

В строгом режиме мы не можем использовать выражения с выраженным выражением (IIFE) Следующая программа доказывает, что я не могу использовать IIFE в строгом режиме. Если я прокомментирую 'use strict', это работает. Это из-за того, что каждое выражение в строгом режиме должно иметь имя?Вызванное вызывное выражение Expression в строгом режиме

'use strict' 
(function _test() { 
var obj = {`enter code here` 
     a:  2, 
     b:  'name', 
     c:  function _c(){ 
       console.log('a: ' + this.a + " b: "+ this.b); 
     } 
}; 
obj.c(); 
})(); 

Ниже приводится выход

(function _test() { 
^ 
TypeError: string is not a function 
    at Object.<anonymous> (/home/ganesh/temp/let.js:2:1) 
    at Module._compile (module.js:456:26) 
    at Object.Module.`enter code here`_extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:929:3 
+3

Вы остановились после того, как точка с запятой ' 'использования strict''. – Pointy

+0

@Pointy Я думал о том же, но автоматическая точка с запятой должна добавить его, не так ли? Или что-то в выражении после его предотвращения? – Tushar

+1

@Tushar no !! Это не место, где произойдет точка с запятой, как должно быть ясно из сообщения об ошибке. Анализатор интерпретирует код как ' (параметры)' из-за '()' вокруг функции. Но строка '' use strict'' не является функцией и, следовательно, ошибкой. – Pointy

ответ

4

Главной проблемой является недостающей точкой с запятой после use strict. Когда JS-движок исследует лексическую структуру вашего кода, он видит 'use strict', а затем (, поэтому он ожидает функцию вида name().

Одно из правил для автоматической вставки точек с запятой гласит:

запятой только когда вставлен, когда следующий входной элемент не может быть разобраны

, который дает 5 проблемных персонажей, чтобы наблюдать за:

(, [, +, -, and / все ОТКЛЮЧИТЬ вставки с запятой

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

Если вы удалите enter code here часть, добавленную SO и добавьте точку с запятой после use strict, все будет работать.

'use strict'; 
 
(function _test() { 
 
    var obj = { 
 
    a: 2, 
 
    b: 'name', 
 
    c: function _c() { 
 
     console.log('a: ' + this.a + " b: " + this.b); 
 
    } 
 
    }; 
 
    obj.c(); 
 
})();

Смежные вопросы