看如下代码:
function test(){
console.log(this === window);
show();
window.show();
function show(){
console.log(this === window, 'fn');
}
}
function show(){
console.log(this === window, 'local');
}
test();
输出结果:
true
true "fn"
true "local"
我的理解是:
① 谁调用this所在的函数,this就代表谁
② 当一个函数和对象没用对象调用时,则默认是window对象
③ 当使用一个变量或函数时,优先使用当前作用域的变量和函数
第一个问题:我的理解对吗?
but(第二个问题,分3个小问题) ···
① test()函数中调用show()时,默认是window对象调用吗?
② 如果上面一条成立,那为什么和下面显式用window调用,结果不一样?
③ 局部变量和局部函数属于window对象吗?
谢谢诸位
个人认为无论是
全局函数
还是局部函数
(抛开那些改变bind的情况下),只要你不显式的指定bind
的对象,在非严格模式下,它都会默认bind
到全局对象上。换句话说,不是因为
window.show === show
, 才认为show的调用者是window,而是因为show被单纯的用于简单的函数调用,所以才将this绑定到全局对象上。