1

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


现在,我确实了解 Scope Closure 的有用性(在此处此处进行了回答 ) ,或者可能更好的是,曾经如此流行的模块设计方法的有用性以及为什么 IIFE 是一个如此强大的工具,可以(不仅)在这些场景,但这不是这个问题的意义所在。

我注意到,每当您想在全局范围内使用严格模式时,大多数linter(包括 jsfiddle)确实倾向于抱怨:

在此处输入图像描述

将块包裹在 IIFE 中似乎可以阻止 linter 抱怨

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

是否有任何理由说明为什么应该use strict;将其保留在 IIFE 内部,或者这只是没有正当理由提出的“毫无根据的反对意见”?

4

2 回答 2

4

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

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

如果您使用的是捆绑器,可能。如果不是,那真的没关系。然而,随着 ES2015 的模块越来越得到更好的支持,使用模块(你现在可以使用捆绑器)将是一个更好的选择,并且根本不需要"use strict"指令(ES2015+ 模块代码总是严格的)。

于 2018-08-03T13:42:59.577 回答
1

我认为这是因为当use strict在全球范围内定义时,您最终将迫使所有第 3 方引用无法正常工作,除非它们也很严格。现在因为你没有能力保证所有加载的资源都会被严格使用,你就有造成麻烦的危险......

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

于 2018-08-03T13:43:24.013 回答