Would this enable “use strict” globally?
类似但不相同的是,如何在全球范围内启用ecmascript"use strict"?
我已经购买了JavaScript模式,它建议启用严格的使用。将它添加到二十多个javascript文件中可能有点麻烦,因此全局启用它将是一件好事。我最初想在main.js的顶部添加如下内容:
1 2 3 4 | "use strict" require({ priority: ["jquery","raphael","myapp"] }); |
然而,我当时认为它可能只对那个文件启用它。然后我想到了这个:
1 | <script data-main="lib/main" src="lib/require.js">"use strict" |
这两种模式中的任何一种都会全局启用ECMAScript 5严格模式吗?
DR:
不,一个
(另一方面,在问题的末尾重新加上
更新:
现在规范中更清楚了(也许在ES5中很清楚,但对我来说不清楚),是的,单独的
原始答案:
说明书上说:
Because strict mode is selected at the level of a syntactic code unit, strict mode only imposes restrictions that have local effect within such a code unit. Strict mode does not restrict or modify any aspect of the ECMAScript semantics that must operate consistently across multiple code units.
(4.2.2节)
所以问题是:不同的
V8(Chrome中的javascript引擎)似乎认为它们是独立的,因此将单个
假设没有显示对
1 2 3 4 5 6 7 8 9 | function test() { try { foo ="bar"; display("foo =" + foo); } catch (e) { display("Exception:" + e); } } |
在正常模式下,创建一个新的全局变量
如果我将这个脚本标记放在一个页面中:
1 2 3 4 5 6 7 8 9 10 | "use strict"; function test() { try { foo ="bar"; display("foo =" + foo); } catch (e) { display("Exception:" + e); } } |
…我得到了预期的异常(实况示例)。不过,如果我把它们放在单独的
1 2 3 4 5 6 7 8 9 10 11 12 | "use strict"; function test() { try { foo ="bar"; display("foo =" + foo); } catch (e) { display("Exception:" + e); } } |
我没有得到例外(在V8上)(示例)。如果你考虑浏览器和JavaScript引擎是如何交互的,这是合理的。
同样地,如果函数在另一个文件中关闭,我会这样做:
1 2 3 | "use strict"; <script src="/inatoq"> |
我没有得到例外(例如),大概是出于同样的原因。
注意这里的示例标记:
1 | <script data-main="lib/main" src="lib/require.js">"use strict" |
无效。
jslint突然报告:使用"use strict"的函数形式
1 2 3 4 5 6 | (function () { "use strict"; // put all of your strict code here }()); |
不,脚本标记被认为是
每个脚本标记都是单独解释的,并且实际上有自己的作用域。这个范围并不明显,因为全局声明的所有内容最终都将出现在全局对象上,但它并不存在。字符串