我有一个非常简单的问题要问:
当我打算使用“ use strict
”时将代码包装在IIFE中是一种好习惯吗?
现在,我确实了解范围关闭(回答 here 和 here) 或许还有更好的方法,因此模块非常有用 设计方法以及IIFE为什么如此强大的工具可供使用 (不仅)在这些情况下,但这不是这个问题 大约。
我注意到的是,大多数棉绒(包括jsfiddle)都会在您想要在全局范围内使用严格模式时抱怨:
包裹IIFE内部的障碍似乎可以阻止短毛猫抱怨
(function(){
"use strict";
console.log("I compiled!");
})();
是否有任何关于use strict;
被保留在IIFE内的依据,还是仅仅是出于毫无根据的“毫无根据的反对”?
答案 0 :(得分:4)
如果将多个脚本捆绑在一起成为一个文件,则顶部的单个"use strict";
会使该文件中的所有脚本代码严格,这可能会导致某些捆绑的问题脚本(如果不是为了在严格模式下工作而设计)。 (如果它们被捆绑在不同的script
标签中,这不是问题,只有它们被捆绑在一起。)
每当我打算使用
"use strict"
时,将代码包装在IIFE中是一种好习惯吗?
如果您正在使用捆绑器,则可能会。如果不是,那并不重要。但是,随着ES2015的 modules 受到越来越多的支持,使用模块(今天可以使用捆绑器实现)将是更好的选择,并且不需要"use strict"
指令根本(ES2015 +模块代码始终严格)。
答案 1 :(得分:1)
我认为这是因为在全局定义use strict
时,您将最终迫使所有第三方引用都无法正常工作,除非它们也严格。
现在,由于您无权保证所有加载的资源都将使用严格的资源,因此有造成麻烦的危险...
在范围内使用“严格”意味着范围的所有者有责任知道其代码是否支持严格。