为什么这两个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
的更多信息。希望有帮助 这个。。。看起来像是个家庭作业问题。