当前位置:  开发笔记 > 编程语言 > 正文

我应该为我写的每一个javascript函数'使用严格'吗?

如何解决《我应该为我写的每一个javascript函数'使用严格'吗?》经验,为你挑选了3个好方法。

我应该为我写的每一个javascript函数'使用严格'吗?

在大型AngularJS项目中使用strict的好习惯是什么?在全球范围内使用它可以打破不支持它的第三方库,但每次都"严格使用"只是重复次数.



1> jeff_mcmahan..:

在这个问题上,要注意过度简化的一般倾向.

首先,所有代码绝对应该以严格模式运行.核心现代javascript功能通过执行严格模式之外的代码而更改(请参阅.call()和apply())或disfigured(silent Errors).(更多关于这一点,来自Crockford.)

但是,这并没有解决您应该如何确保代码以严格模式运行的方式.至少有两种情况需要考虑:

在浏览器中,您的代码应在缩小后传递.如果你包含'use strict'在每个函数体中,你的minifier将不会将它剥离出来,并且你将浪费在任何地方重复它的字节.您只需要在最外面的函数范围中 - 在模块定义的顶部.一种方法是将缩小的代码包装在单个IIFE闭包中作为构建过程的一部分:

;(function (){ 
  'use strict'
  // All code here.
}())

我认为这接近理想的做法,但它或多或少地要求你采用持续集成工作流程(因为,为了观察你的代码在严格模式下运行,你必须把它全部包裹起来一个闭包) .如果不以这种方式工作,则必须将use strict指令包含在未在另一个函数范围内声明的每个函数的顶部.

当然,在服务器上,它更简单.代码不会缩小,字节无关紧要,因此您只需将use strict指令包含在每个文件的顶部即可.

警告--use_strict:如果您控制脚本的运行方式,您可能会发现自己很想使用--use_strict运行时标志.这很简单,但这意味着所有依赖项必须符合严格模式.由于您无法控制每个第三方的合规性,因此这通常是不明智的.


假设你的js文件被附加到另一个名为returnsFunc.js的文件中,该文件返回一个函数.然后你有一个函数值后跟'(function()...)',也就是说,你的文件被解释为returnFunc.js返回的函数的输入,并调用该函数.在那种情况下,没有什么能像预期的那样工作,并且调试将非常混乱.前缀分号消除了这种可能性.

2> Bergi..:

您编写的所有代码1 都应该处于严格模式.它可以帮助您通过不忽略异常来捕获错误.

但是,,这并不意味着您需要在"use strict";每个function定义前加上,您只应将它放在模块范围内 - 每个文件一次 - 以便它被所有函数继承.当你要切换到ES6模块时,无论如何都会暗示.

1:我甚至争论全局启用它,因为严格模式不应该破坏任何正确编写的代码.
如果它确实破坏了第三方脚本,解决方案可能不会再次禁用严格模式...



3> Praveen Kuma..:

简短的回答,是的!您不需要为每个函数包含它,而是每个JavaScript文件只需添加一次.当你启动文件时,从这样的闭包开始:

(function () {
  "use strict";
  // Rest of your code.

})();


为什么?你可以把它放在文件的顶部而不需要自调用函数包装器.
是的,也是外部范围.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有