javascript - 在严格模式下立即调用函数表达式

标签 javascript

<分区>

在严格模式下我们不能使用立即调用函数表达式(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();
}) ();

输出如下

(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

最佳答案

主要问题是 use strict 后缺少分号。 当 JS 引擎检查代码的词法结构时,它会看到 'use strict' 然后是 ( 所以它需要一个 name() 形式的函数

自动分号插入状态的规则之一:

Semicolons are only ever inserted when the next input token cannot be parsed

它给出了 5 个需要注意的有问题的字符:

(, [, +, -, and/ all DISABLE semicolon insertion

如果下一行的语句以这些字符开头,而前一行缺少分号,则这两行将被引擎视为一行,这很容易出错。

如果您删除 SO 添加的 enter code here 部分并在 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();
})();

关于javascript - 在严格模式下立即调用函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33406395/

相关文章:

javascript - 位置固定 y 轴仅在可滚动的 div 内

javascript - 如何在axios响应后在React中使setState同步

javascript - 暂时绕过 CSS 转换

javascript - IE9 中输入按钮单击不是通过 JavaScript 调用的

javascript - 为什么使用 document.write?

javascript - 在 JavaFX 中访问 Javascript 的返回值

javascript - 拒绝输入字段中 Alexa 排名小于 x 的网站

javascript - Android + Linux Chroot + Node.js = 在手机上运行您的 node.js 应用程序

javascript - 使用jquery验证信用卡

javascript - 使用 javascript 或 jQuery 自动更改图像