js中this、window及作用域的问题
看如下代码:
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对象吗?
谢谢诸位
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
《javascript高级程序设计》中有说到:this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象同常指向window
不过针对于匿名函数this具有全局性的观点仍是有争议的,具体this作用域问题可参考
【Javascript】深入理解this作用域问题以及new运算符对this作用域的影响
test
里面的show
是一个closure,closure中的this
默认指向全局对象(window
或global
)。两个show调用结果一样的呀?个人认为无论是
全局函数
还是局部函数
(抛开那些改变bind的情况下),只要你不显式的指定bind
的对象,在非严格模式下,它都会默认bind
到全局对象上。换句话说,不是因为
window.show === show
, 才认为show的调用者是window,而是因为show被单纯的用于简单的函数调用,所以才将this绑定到全局对象上。