函数中this指向问题

document.getElementById( 'div1' ).onclick = function(){
    console.log( this.id );
    var func = function(){ 
        console.log ( this.id );
    } 
    func();
}; 

请问上面func中的this为什么会指向window?

我的理解是func执行时所在的上下文环境是onclick函数。所以this应该指向该函数,同样的下面的函数我倒是很好理解,因为定时器延迟了函数的执行,所以里面的this应该指向window,但是上面的函数没有定时器啊

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;
foo(); //21(没有用call)
阅读 2.8k
5 个回答

谁执行函数,函数中的 this 就指向谁,与他在哪里执行没有关系。

这是一个典型的误解

func的词法作用域是onclick函数,但是词法作用域和this的指向没有关系。

this的绑定规则其实是这样的,func只符合第四条,所以绑定到全局对象

图片描述

看这篇文章https://github.com/JoeHetfiel...

建议你去看一下你去看一下这本书《你不知道Javascript 上卷》的第二章,他讲的非常详细

this 是指调用当前函数的对象引用

感谢@Ezio@散一群逗比给的提示,我确实是去《你不知道Javascript 上卷》的第二章狠狠的看了一遍,我现在自己来说一下我的理解吧。

函数里面的func只是拿到对应函数的引用地址,而此时函数还是在全局环境中,所以在调用时,里面的this指向window,类似于下面这种情况

var a = 1;
var obj = {
  a: 2,
  foo: function() {
    console.log(this.a);
  }
}

var bar = obj.foo;

foo(); // 1

其实还有一种更好理解的说法,就是this永远指向最后调用它的那个对象。**该句话摘录链接

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题