在严格模式下,我们不能使用立即调用函数表达式(IIFE)吗?以下程序证明我不能在严格模式下使用IIFE。如果我评论“使用严格”,它会起作用。这是因为每个严格模式下的表达式都必须具有名称的原因吗?
'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();
}) ();
Run Code Online (Sandbox Code Playgroud)
以下是输出
(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
Run Code Online (Sandbox Code Playgroud)
主要的问题是之后缺少分号use strict。当JS引擎检查代码的词法结构时,它看到'use strict',然后看到,(因此它期望form的功能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();
})();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |