我在学习 JS 时遇到了“use strict”。然后,这里Should I 'use strict' for every single javascript function I write? @Bergi 说“你只应该在模块范围内放置'use strict' - 每个文件一次 - 以便它被你的所有函数继承”。 “它被你所有的函数继承”是否意味着某个模块中的每个函数在其自身内部使用“use strict”?
最佳答案
Is it true that by "it is inherited by all your functions" means each function in a certain module uses 'use strict' inside of itself?
如果出现以下情况,函数将以严格模式运行:
(1) 该函数在 ES6 模块中(无论如何都在严格模式下运行),或者
(2) 在函数定义之上有一个正确的'use strict'
指令,词法。
除了一些不太常见的实例,例如在 constructor
中。
'use strict'
的词法继承方式与引用变量的方式以及变量作用域的工作方式相同 - 如果函数的任何外部 block 是严格的,则内部函数也是严格的以及。因此,例如,使用以下代码:
'use strict';
function foo() {
function bar() {
function baz() {
}
}
}
无论您在 foo
、bar
和 baz
中放入什么其他代码,所有 这些函数,无论它们如何运行,都将以严格模式运行。如果从一个不是在严格模式下运行的源调用这些函数中的一个,被调用的函数仍将在严格模式下运行。例如:
<script>
'use strict';
function foo() {
return function bar() {
return function baz() {
console.log('baz running. strict:', this === undefined);
}
}
}
foo()()();
</script>
<script>
// Non-strict script calling strict function:
foo()()();
</script>
关于javascript - 使用ES模块时是否隐含 'use strict'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60542821/