在关于 JavaScript 严格模式的 MDN 文档 中,“语义差异 -> 函数调用中的
以下是我的测试方式:
结果:
this
”部分提到:
我需要澄清这个声明。但是当我测试时,我没有看到代码模式(严格模式或非严格模式)有任何区别。当使用 call 或 apply 调用函数时,如果该值为基础类型,则此值将被装箱为对象(对于未定义和 null 的情况则为全局对象)。在严格模式下,该值会直接传递而不进行转换或替换。
以下是我的测试方式:
(function() {
function a() {
console.log(this);
}
function b() {
"use strict";
a.call(2);
}
function c() {
a.call(3);
}
b();
c();
})();
"use strict";
放在顶层、IIFE的开头或者a()
中,它会按预期工作。但是如果你把它放在b()
或c()
中就不行了。不确定为什么。 - Barmar