在这个例子中:
需要理解的是--在JavaScript中,函数的this
指向是在运行时动态绑定的,并不是在函数定义时确定的。
回调函数是通过函数表达式传递给createData函数的,而不是在obj对象的tool方法中定义的。因此,回调函数的this并没有继承自tool方法的this。
默认情况下,当使用普通函数调用时,函数内部的this
会被绑定为调用该函数的对象。但是,在回调函数中,函数的调用方式取决于回调函数的调用者。在这个例子中,createData
函数在全局作用域中调用了回调函数,因此回调函数的this
绑定到了全局对象window;
如果您想在回调函数中访问tool
方法的this
,可以使用箭头函数:
var obj ={
data:100,
tool:function(){
createData((n) => {
console.log(this,1111); // obj 1111 })
}}
obj.tool();
理解:
this指向是 离它最近的或者嵌套级别的 function/方法的调用者,上面第一个离他最近的是function(n);第二个箭头函数,离他最近的是createData()。