在JavaScript代码中添加“use strict”作为第一个语句¹ 将对整个
实施严格模式
为什么:
"use strict";
012;
不会抛出错误
而
(function () {
"use strict";
012; })();
呢? (严格模式下不允许使用八进制文字。)
John resig says nothing about it. he just says :
简单。把它放在一个程序的顶部,以便为整个程序启用它 脚本:
“使用严格”;或者将其置于一个函数中以打开严格模式 只在这种背景下。
function imStrict(){“use strict”; // ...你的代码......}
我在控制台中测试了代码。(chrome)。在jsbin示例中 - 它正在工作。不过,我不明白为什么它在控制台中表现不同。
答案 0 :(得分:2)
会抛出错误。
quentin@workstation:~ # cat > tmp/foo.js
"use strict";
012;
quentin@workstation:~ # node tmp/foo.js
/users/quentin/tmp/foo.js:2
012;
^^^
module.js:434
var compiledWrapper = runInThisContext(wrapper, filename, true);
^
SyntaxError: Octal literals are not allowed in strict mode.
at Module._compile (module.js:434:25)
at Object..js (module.js:464:10)
at Module.load (module.js:353:31)
at Function._load (module.js:311:12)
at Array.0 (module.js:484:10)
at EventEmitter._tickCallback (node.js:190:38)
答案 1 :(得分:1)
控制台的行为与其他地方的行为方式不同,请尝试在浏览器中打开以下内容,然后重新显示错误,而无需将其包装在函数中。
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>use strict</title>
<script>
"use strict";
012;
</script>
</head>
<body>
</body>
</html>
您可以通过仅键入~
,+
等来确定控制台的实施方式与直接执行不同(您将获得SyntaxError: Unexpected token }
)。
通过直接编写这样的代码可以重现类似的行为(我不会把它称为相同的,因为我不知道控制台是如何做的)
example: { // labeled block
"use strict"; // your code
012;
} // end of block, no SyntaxError thrown for strict
答案 2 :(得分:-1)
012是八进制文字,在严格模式下不允许,因为它被ECMA-262第3版弃用。 JavaScript 1.5仍支持八进制整数文字以实现向后兼容。并且您的示例正在抛出错误!
你有3种可能性。删除八进制文字
不要使用严格模式
或者您可以先使用八进制文字,并将所有代码包装在匿名函数中,并将严格模式限制为您立即调用的函数表达式(iife):
012
(function () {
"use strict";
... your code
})();