为什么这两个JavaScript函数调用具有相同的;这";价值

为什么这两个JavaScript函数调用具有相同的;这";价值,javascript,Javascript,标题说明了一切。到目前为止,我理解,这个关键字指的是调用当前函数的上下文。但为什么这两个函数调用引用相同的num变量 var num = 0; function demo() { this.num++; } function caller() { var num = 0; demo(); console.log("caller " + num);// 0 } demo(); console.log("global " + num);// 1 caller(

标题说明了一切。到目前为止,我理解,
这个
关键字指的是调用当前函数的上下文。但为什么这两个函数调用引用相同的
num
变量

var num = 0;

function demo() {
    this.num++;
}

function caller() {
    var num = 0;
    demo();
    console.log("caller " + num);// 0
}

demo();
console.log("global " + num);// 1

caller();
console.log("global " + num);// 2

默认情况下,
是全局对象(
窗口

在顶级代码中声明变量时(与在函数中声明相反),它将成为全局对象的属性


因此,
this.num
和全局
num
变量是相同的。

这取决于调用站点(调用包含此变量的方法的位置)。由于您首先调用demo(),所以这表示窗口(即全局)。由于num已经在全局空间上声明,所以调用方方法将使用全局方法,并将忽略对其进行重新定义

由于初始变量num的值为0,因此demo()将此值指定给全局
window
对象,调用
demo()
会增加全局
num


调用
demo()
caller()
都是增量全局
num
保存上下文对象。由于函数不是任何对象的一部分,因此它们属于常规
窗口
对象,就像
num
一样,它们都在相同的上下文中运行。(
=
窗口

演示
中将引用
窗口
对象,因为函数似乎是全局变量(窗口)的成员,因此无论何时调用
演示
(或
调用方
,因为此函数只调用
演示
),全局
num
变量将递增


然而,
caller
中的
num
变量是一个局部变量,它会覆盖调用者函数中的全局变量,但因为您从未对该变量执行任何计算;它将始终保持为0。

在全局函数中,这是指
窗口
对象。在
caller
函数中,
num
输出局部变量。这是一个值得一看的例子。此外,这有助于解释有关使用
this
的更多信息。希望有帮助

这个。。。看起来像是个家庭作业问题。