我应该为我编写的每个 javascript 函数 'use strict' 吗?
Should I 'use strict' for every single javascript function I write?
我应该为每个 javascript 函数编写 'use strict' 吗?
在大型 AngularJS 项目中使用 strict 有什么好的做法?在全球范围内使用它会破坏不支持它的第三方库,但每次都做 'use strict' 只是很多重复。
您编写的所有 代码1 should be in strict mode. It helps you catch mistakes 不忽略异常。
但是,没有,这并不意味着您需要在每个 function
定义前加上 "use strict";
,您只需要将它放在模块中scope - 每个文件一次 - 这样它就可以被你所有的函数继承。当你打算切换到 ES6 模块时 无论如何。
1:我什至主张在全球范围内启用它,因为严格模式不应该破坏任何正确编写的代码。
如果它确实破坏了第三方脚本,解决方案可能不是再次禁用严格模式……
简答,是的!您不需要为每个函数都包含它,而是您可以只为每个 JavaScript 文件添加一次。启动文件时,以这样的闭包开始:
(function () {
"use strict";
// Rest of your code.
})();
在这个问题上,请注意过度简化的普遍趋势。
首先,在严格模式下,您的所有代码绝对应该 运行。核心现代 javascript 功能已更改(参见来自 Crockford 的 .call() and apply()) or disfigured (silent Errors) by executing code outside of strict mode. (More on this here。)
但是,这并没有解决如何您应该确保您的代码运行处于严格模式。至少有两种情况需要考虑:
在浏览器中,您的代码应该在缩小后交付。如果你在每个函数体中包含 'use strict'
,你的压缩器将不会删除它,你会浪费字节在任何地方重复它。你只需要在最外层的函数范围内——在你的模块定义的顶部。一种方法是将缩小的代码作为构建过程的一部分包装在单个 IIFE 闭包中:
;(function (){
'use strict'
// All code here.
}())
我认为这接近于理想的实现方式,但它或多或少地要求您采用持续集成工作流(因为,要在严格模式下 运行ning 观察您的代码,你必须把它全部包起来一个闭包)。如果您不这样做,则必须在每个未在另一个函数范围内声明的函数的顶部包含 use strict
指令。
在服务器上,当然简单多了。代码未缩小,字节数无关紧要,因此您可以在每个文件的顶部包含 use strict
指令。
关于 --use_strict
的警告:如果您控制脚本的方式 运行,您可能会发现自己很想使用 --use_strict
运行时间标志。这很简单,但这意味着所有依赖项 必须符合严格模式。由于您无法控制每个第三方的合规性,因此这通常是不明智的。
没有。冗余是不必要的。声明的使用
"use strict";
最好在文件或流范围内,尤其是在使用第三方库的情况下。它有助于决定是按原样使用它们、包装它们还是继续使用它们。
文件级别Self-executing函数
在 self-executing 闭包中看到整个文件或流变得越来越普遍。在这种情况下,使用严格模式的声明(上面)被插入闭包的第一行,其中 ... 是。
(function () {
...
}())
提一下 self-execution 并非总是必要的,如果过度使用实际上会导致加载缓慢和其他问题。
关于声明范围的更多信息
的范围取决于您是将声明放在函数内部还是外部,并适用于闭包范围内声明之后的所有语句。
如果所有文件或流都已经与更严格的模式兼容或可以轻松兼容,则在函数内部使用声明是错误的方法。冗余是不必要的,因此建议将声明放在文件顶部或流的开头。
有时只有部分功能符合更严格的规则。在这种情况下,可以使用声明的不太理想的功能范围来鼓励至少在已经符合的功能中进行更精细的编码实践。
为什么要严格模式?
严格模式消除了某些从语言设计角度来看不太理想的宽松语言解析和执行特征。这些 non-strict 模式语言特征被认为是向后兼容的默认行为。概要和详细信息显示在这里。
何时以及是否会弃用早期 Netscape 时代的这些较旧的语言特征,或者严格模式是否会在某个时候成为跨浏览器的默认行为,都没有明确定义,但更严格的模型可能会产生更少的歧义和风险来源。如果你希望提高编码实践和代码库的可维护性、可移植性和可扩展性,那么严格模式是一个不错的选择。
注意 对于来自 "What's the benefit of using "function() 'use strict'” in every file?"
的人
你可以放置
"use strict";
在代码序列的顶部或函数内部,因此每个文件或每个函数只有一行代码。
其他几行代码在代码中有其他用途here.
- Self-invoking 函数
- 工厂调用
有些将整个文件放在一个 self-executing 函数中,但并非在所有情况下都需要这样做。
我应该为每个 javascript 函数编写 'use strict' 吗?
在大型 AngularJS 项目中使用 strict 有什么好的做法?在全球范围内使用它会破坏不支持它的第三方库,但每次都做 'use strict' 只是很多重复。
您编写的所有 代码1 should be in strict mode. It helps you catch mistakes 不忽略异常。
但是,没有,这并不意味着您需要在每个 function
定义前加上 "use strict";
,您只需要将它放在模块中scope - 每个文件一次 - 这样它就可以被你所有的函数继承。当你打算切换到 ES6 模块时
1:我什至主张在全球范围内启用它,因为严格模式不应该破坏任何正确编写的代码。
如果它确实破坏了第三方脚本,解决方案可能不是再次禁用严格模式……
简答,是的!您不需要为每个函数都包含它,而是您可以只为每个 JavaScript 文件添加一次。启动文件时,以这样的闭包开始:
(function () {
"use strict";
// Rest of your code.
})();
在这个问题上,请注意过度简化的普遍趋势。
首先,在严格模式下,您的所有代码绝对应该 运行。核心现代 javascript 功能已更改(参见来自 Crockford 的 .call() and apply()) or disfigured (silent Errors) by executing code outside of strict mode. (More on this here。)
但是,这并没有解决如何您应该确保您的代码运行处于严格模式。至少有两种情况需要考虑:
在浏览器中,您的代码应该在缩小后交付。如果你在每个函数体中包含 'use strict'
,你的压缩器将不会删除它,你会浪费字节在任何地方重复它。你只需要在最外层的函数范围内——在你的模块定义的顶部。一种方法是将缩小的代码作为构建过程的一部分包装在单个 IIFE 闭包中:
;(function (){
'use strict'
// All code here.
}())
我认为这接近于理想的实现方式,但它或多或少地要求您采用持续集成工作流(因为,要在严格模式下 运行ning 观察您的代码,你必须把它全部包起来一个闭包)。如果您不这样做,则必须在每个未在另一个函数范围内声明的函数的顶部包含 use strict
指令。
在服务器上,当然简单多了。代码未缩小,字节数无关紧要,因此您可以在每个文件的顶部包含 use strict
指令。
关于 --use_strict
的警告:如果您控制脚本的方式 运行,您可能会发现自己很想使用 --use_strict
运行时间标志。这很简单,但这意味着所有依赖项 必须符合严格模式。由于您无法控制每个第三方的合规性,因此这通常是不明智的。
没有。冗余是不必要的。声明的使用
"use strict";
最好在文件或流范围内,尤其是在使用第三方库的情况下。它有助于决定是按原样使用它们、包装它们还是继续使用它们。
文件级别Self-executing函数
在 self-executing 闭包中看到整个文件或流变得越来越普遍。在这种情况下,使用严格模式的声明(上面)被插入闭包的第一行,其中 ... 是。
(function () {
...
}())
提一下 self-execution 并非总是必要的,如果过度使用实际上会导致加载缓慢和其他问题。
关于声明范围的更多信息
的范围取决于您是将声明放在函数内部还是外部,并适用于闭包范围内声明之后的所有语句。
如果所有文件或流都已经与更严格的模式兼容或可以轻松兼容,则在函数内部使用声明是错误的方法。冗余是不必要的,因此建议将声明放在文件顶部或流的开头。
有时只有部分功能符合更严格的规则。在这种情况下,可以使用声明的不太理想的功能范围来鼓励至少在已经符合的功能中进行更精细的编码实践。
为什么要严格模式?
严格模式消除了某些从语言设计角度来看不太理想的宽松语言解析和执行特征。这些 non-strict 模式语言特征被认为是向后兼容的默认行为。概要和详细信息显示在这里。
何时以及是否会弃用早期 Netscape 时代的这些较旧的语言特征,或者严格模式是否会在某个时候成为跨浏览器的默认行为,都没有明确定义,但更严格的模型可能会产生更少的歧义和风险来源。如果你希望提高编码实践和代码库的可维护性、可移植性和可扩展性,那么严格模式是一个不错的选择。
注意 对于来自 "What's the benefit of using "function() 'use strict'” in every file?"
的人你可以放置
"use strict";
在代码序列的顶部或函数内部,因此每个文件或每个函数只有一行代码。
其他几行代码在代码中有其他用途here.
- Self-invoking 函数
- 工厂调用
有些将整个文件放在一个 self-executing 函数中,但并非在所有情况下都需要这样做。