javascript - js中this指向(涉及回调函数)

查看:127
本文介绍了javascript - js中this指向(涉及回调函数)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

常见的说法是js中this指向调用该方法的对象,但是以下情形仿佛并不是这样

var one = {name: "onename", say: function(greet){ return this; }};
var test = {name: "testname", method : function(callback){ var self = callback(); console.log(self);}};

one.say()输出如下:

这没有问题,但是test.method(one.say)输出就比较难以理解了:

test.method(one.say)不是应该输出对象test吗?怎么就是Window了呢?
如果one换成setTimeout是可以理解的,setTimeout是挂在window对象下的方法嘛,但此处情形真心期待大牛们的帮助。

解决方案

函数的this是由运行时决定的,函数作用域链是由声明时决定的。

当函数作为普通变量时,其this指向全局global(window)

当你把one.say传给test.method作为参数时,此时这个callback就是一个普通变量,所以直接调用,其中的this就是global

这篇关于javascript - js中this指向(涉及回调函数)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆