在JavaScript中,“(function(){"use strict"})();”和“use strict”有什么区别?

7

以下两者有什么不同:

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

"use strict"

我不明白什么时候或为什么我会使用其中之一?

我认为一个声明完整的外部JS文件是严格模式,而另一个使函数成为严格模式。

当我看到人们将他们完整的外部JavaScript代码包含在内时,我的困惑就来了:

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

为什么不直接在文档中使用"use strict"呢?最后,我已经使用相同代码测试了一个外部的JS文档。其中一个我使用了"use strict"并且它起作用了。另一个我将整个JS文档封装在(function () {'use strict';})();中,但它没有起作用。为什么呢?JavaScript是我的第一种编程语言,我对它的深度有点不知所措。非常感谢你的耐心和专业指导,感谢您提供的任何帮助或方向。非常感谢。

一个适用于单个函数,另一个适用于文件中的每个函数。也许将其应用于所有内容是不希望的。 - user47589
2个回答

3
如果您
"use strict";

在文件的顶部,整个文件(即文件/脚本标签中的所有代码,包括第三方库【感谢VLAZ澄清】)都是严格模式。
将其放置在IIFE内部:
(function() { "use strict"; })();

这意味着只有在IIFE内部的代码将被视为严格模式。


@VLAZ 在文件顶部使用"use strict"仅影响该文件。它不会影响其他作用域。它将影响连接到单个文件中的每个脚本,但不会影响其他脚本文件。ES2015还引入了一个模块级别模式,影响该模块中的每个脚本。 - user47589
@Amy 谢谢。我不知道我从哪里得到了那个信息,然后我重新检查了我认为看到它的来源,但没有看到它。我想可能是幻觉吧。 - VLAZ

0

好的

(function() { "use strict"; })()

是完全无用的;它对任何事情都没有影响。

在作用域的开头,比如一个函数或者一个 <script> 块中,

"use strict";

使用"use strict"语句告诉解释器你想要在“严格”模式下解释代码。如果它在一个什么也不做的函数中,它对任何东西都没有实际意义。当然,如果你所说的实际函数除了"use strict"语句之外还有更多的代码,那么它意味着该函数将在“严格”模式下被解释。


1
我最初给你点了个踩,因为关于它是无用的评论是不必要的,也没有帮助回答问题。我认为这种暗示是将严格模式调用放在具有代码的IIFE模块的顶部,但OP为简洁起见排除了代码。你添加了更多信息,我取消了踩。我仍然认为OP的意思是除了严格调用之外,IIFE中会有更多的代码。 - zero298
1
@zero298,对于OP发布的内容做出假设是我在这个网站上10年来学到的一件事情;我们不可能知道实际情况。也许OP的意思是会有更多的代码,但也可能不是。我发布的答案涉及问题中的确切代码。 - Pointy
2
在我看来,对于初学者而言,避免假设尤为重要。 - user47589
1
非常感谢,我真的很感激你的帮助!@pointy 喜欢你的Van Eyke头像!! - Starkemp315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接