声明一个普通函数:
function foo() {
console.log('foo is executing');
}
// 如果不显示的声明函数的调用者,为什么缺省情况下调用者会是window,有什么出处么。
foo();
声明一个普通函数:
function foo() {
console.log('foo is executing');
}
// 如果不显示的声明函数的调用者,为什么缺省情况下调用者会是window,有什么出处么。
foo();
函数中的this就是函数的调用者
如果是通过对象的方法调用,即obj.method(params)这种形式的调用,this会被绑定成这个obj。
如果只是一个独立函数的调用,如你的例子,分为两种:
2.1 一种是该函数为顶级函数(声明在全局作用域中的),于是该函数会成为该全局对象(window或者global)的一个同名属性,在非严格模式时method(params)的调用会变成`window.method(params)`或者`global.method(params)`,在严格模式中,method中的this会被绑定到`undefined`上.
2.2 如果该函数不是顶级函数(在某函数中再声明的,成为一个局部函数), 则它的this在没有特别声明时,等同于包含它的函数的this。
特殊情况就是使用call, apply, bind函数来强制改变this的绑定。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答855 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
在浏览器中,你的全局变量是
window
对象的属性,函数是window
对象的方法