this
指的就是指代函数当前的运行环境。
那么如何理解上面那就话呢?我们还是看例子
var f = function () { console.log(this.x); } var x = 1; var obj = { f: f, x: 2, }; // 单独执行 f() // 1 // obj 环境执行 obj.f() // 2
上面: 函数f()在全局环境执行,所有this.x指向的就是全局环境的x。而obj.f()的执行环境是obj。
如果这是这样说还是有很多人不太明白怎么找当前的运行环境如下面例子。
var obj = { bb: function () { console.info(this); var aa=function(){ console.info(this); } //写法三 aa(); } }; var bb = obj.bb; // 写法一 obj.bb(); // 写法二 bb();
上面this指向其实很简单,就是看看是通过哪个对象 调用的方法。写法一不用多说this就是指向obj。写法二bb()的完整写法 是 window.bb(),我们要看调用时当前作用域是什么,无论bb()在哪里调用都一样。同理方法三aa()也就是window.aa() 即使是aa()是在bb()里调用的。可以分拆成下面
var aa=function(){ console.info(this); } var obj = { bb: function () { console.info(this); //写法三 aa(); } }; var bb = obj.bb; // 写法一 obj.bb(); // 写法二 bb();
注意:这里不包括ES6中的this ,直说自己是怎么找的具体去看阮一峰老师: