我正在学习javascript并编写一些简单的控制台(Chrome控制台)应用程序来熟悉它。
我有以下代码:
var john = {
name: 'John',
yearOfBirth: 1990,
calculateAge: function() {
console.log(this);
console.log(this.yearOfBirth);
function innerFunction() {
console.log(this);
}
console.log("inner function called");
innerFunction();
}
}
john.calculateAge();
这让我感到惊讶(至少对我而言)输出:
script.js:64 {name: "John", yearOfBirth: 1990, calculateAge: ƒ}
script.js:65 1990
script.js:71 inner function called
script.js:68 Window {frames: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, `close: ƒ, …}`
所以我会想到当innerFunction被调用作为范围内的对象时(那个'这个'指的是)对象John或者函数(它也是javascript中的对象,对吧?)innerFunction。相反,它是全局对象,在本例中为Window。为什么?这里的规则是什么,我没有看到?
我在问这个具体的例子。所以,是的,问题是独一无二的。怎么会这样?这是我的。