将“严格模式”包装在IIFE(自调用)表达式中是一种好习惯吗?

时间:2018-08-03 13:39:10

标签: javascript compiler-warnings strict strict-mode

我有一个非常简单的问题要问:
当我打算使用“ use strict”时将代码包装在IIFE中是一种好习惯吗?


现在,我确实了解范围关闭(回答 herehere 或许还有更好的方法,因此模块非常有用 设计方法以及IIFE为什么如此强大的工具可供使用 (不仅)在这些情况下,但这不是这个问题 大约。

我注意到的是,大多数棉绒(包括jsfiddle)都会在您想要在全局范围内使用严格模式时抱怨:

enter image description here

包裹IIFE内部的障碍似乎可以阻止短毛猫抱怨

(function(){
	"use strict";
	console.log("I compiled!");
})();

是否有任何关于use strict;被保留在IIFE内的依据,还是仅仅是出于毫无根据的“毫无根据的反对”?

2 个答案:

答案 0 :(得分:4)

如果将多个脚本捆绑在一起成为一个文件,则顶部的单个"use strict";会使该文件中的所有脚本代码严格,这可能会导致某些捆绑的问题脚本(如果不是为了在严格模式下工作而设计)。 (如果它们被捆绑在不同的script标签中,这不是问题,只有它们被捆绑在一起。)

  

每当我打算使用"use strict"时,将代码包装在IIFE中是一种好习惯吗?

如果您正在使用捆绑器,则可能会。如果不是,那并不重要。但是,随着ES2015的 modules 受到越来越多的支持,使用模块(今天可以使用捆绑器实现)将是更好的选择,并且不需要"use strict"指令根本(ES2015 +模块代码始终严格)。

答案 1 :(得分:1)

我认为这是因为在全局定义use strict时,您将最终迫使所有第三方引用都无法正常工作,除非它们也严格。 现在,由于您无权保证所有加载的资源都将使用严格的资源,因此有造成麻烦的危险...

在范围内使用“严格”意味着范围的所有者有责任知道其代码是否支持严格。