JavaScript:*可以*通过调用/应用/绑定设置未定义的 属性 吗?

JavaScript: *Can* set property of undefined with call / apply / bind?

我想我刚刚发现了一个关于 JavaScript 的新奇事。

有人知道这是怎么发生的吗?

let test;

function setProp() {
  this.prop = 42;
}
setProp.call(test);

// No error yet?
// So 42 should be saved inside test.prop?

// Though test=undefined?

console.log(test);
try {
  console.log(test.prop);
} catch (e) {
  console.log(e.message);
}

// -> undefined
// -> Cannot read property 'prop' of undefined
// Ok, indeed

function getProp() {
  console.log(this.prop);
}
getProp.call(test);

// -> 42
// Wait, what?

我只是好奇 :)

在非严格模式下,将 undefined 作为第一个参数传递给 .call() 意味着您希望它成为全局对象(如 window)。

尝试使用顶部的 "use strict"; 进行测试,看看是否有所不同。