为什么通常在IIFE之后(而不是在脚本顶部)“严格使用”?

卡特里娜·巴斯克(Katrina Basques)

我轶事地注意到,这种现象use strict似乎更常见:

(function() {
  'use strict';
  ...

比这个:

'use strict';
(function() {
  ...

香草JS实现TodoMVC的做到这一点,例如。

是否有一个原因?

编辑:我知道整个文件与功能块的区别。TodoMVC是一个很好的例子,它说明了为什么这个位置对我来说很奇怪,因为它不依赖任何外部库,因此整个“与非严格第三方玩得很好”在这里并不适用。

人造丝

local范围内声明它将强制功能块strict-mode被浏览器考虑

您可以non-strict观察除IIFE


内部IIFE

(function() {
  "use strict";
  a = 100;
})();
b = 200;


对于整个脚本:

"use strict";
(function() {
  try {
    a = 100;
  } catch (e) {
    console.log(e + '');
  }

})();
b = 200;

正如docs中突出显示的那样

如果您strict对整个脚本使用模式,则不可能盲目地将不冲突的脚本串联在一起。考虑将严格模式脚本与非严格模式脚本串联:整个串联看起来很严格!反之亦然:非严格加上严格看起来非严格。严格模式脚本之间的串联是可以的,非严格模式脚本之间的串联是可以的。仅连接严格和非严格的脚本是有问题的。因此,建议您逐个功能启用严格模式(至少在过渡期间)。

您还可以采用将脚本的全部内容包装在一个函数中并使该外部函数使用严格模式的方法。这消除了连接问题,但是这意味着您必须显式导出函数范围之外的所有全局变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么通常在删除主键之前创建索引?

人工神经网络 - 为什么通常在隐藏层使用 sigmoid 激活函数而不是 tanh-sigmoid 激活函数?

为什么通常在每个Scala项目中都安装Scala,而不是在系统范围内安装它?

为什么程序员通常在一些函数变量中使用下划线前缀?

为什么Git后接收挂钩通常在裸仓库中?

为什么我们通常在分而治之算法中分为两部分?

为什么所附的SD卡通常在睡眠后不显示?

什么是Java中的serialVersionUID,通常在异常类中?

如何解决终端屏幕混乱的问题?(通常在调整大小之后)

WiFi通常在Ubuntu 17.10上使用RTL8192CU断开连接

是否可以使用fs.createWriteStream在文件中间写入文本?(或通常在nodejs中)

强制使用Serilog中的特定参数(或通常在外部函数中)

通常在记录已存在时如何有效使用first_or_initialize

您如何知道退出时该进程的返回码是什么以及通常在何处记录该值?

npm安装通常在下载后挂起

应用程序通常在哪里存储数据?

通常在while循环中读取开关

在通常在Foreach中的单行中回显值

通常在哪里找到_SECURE_SCL?

我们在前端使用 javascript 的回调函数吗?还是通常在后端使用?

你通常在 c++ 上使用 int 值,'255' 和十六进制值,'0xff' 吗?

为什么NodeJ通常使用MongoDB而不是Mysql?

如何在UNIX变体(例如macOS)上使用sysctl来读取Linux上通常在/ proc / self中找到的信息?

通常在c#中仅允许使用每个套接字地址(协议/网络地址/端口)的一种

为什么使用“ 0之后”而不是直接运行命令?

为什么我的bash脚本在|之后不使用sudo?

通常在WildFly中取消部署时会卸载静态字段吗?

在C ++中,通常在哪里在类外部声明和定义函数?

您通常在“中等信任度”中拥有哪些FileIO权限?