背景
箭头函数是没有this 的, 如果用this 就代表的是 外面那一层对象。箭头函数和匿名函数差不多, 定时函数也是匿名函数
先看下这个函数
<script>
var obj = {
say: function () {
setTimeout(function () {
console.log(this) // window
});
}
}
obj.say();
</script>
匿名函数 , 定时器中的函数, 由于没有默认的宿主对象, 所以默认this 指向window
普通函数中的this;
- this 总是代表她的直接调用者(js的this是执行上下文) 例如obj.func , 那么func 中的this就是obj
- 在默认情况下(非严格模式下, 没有找到直接调用者, this指的是window)
- 在严格模式下, 没有直接调用这的函数this 指的是undefined
- 使用call apply bind(ES5 新增的 ) 绑定的, this 指的是绑定的对象
箭头中的this:
箭头函数中没有自己的this. 他的this是继承而来;默认指向的是在定义他时所处的对象(宿主对象), 而不是执行时候的对象。 定义他的时候可能环境是window; 箭头函数可以方便让我们在setTime, setInterval 中方便使用this
下面来研究一下 this 的使用场景
先来了解一下作用域链
当在函数中使用一个变量的时候, 首先在本函数内查找改变量, 如果这不到就找父级函数, 最后直到window, 全局变量默认挂在在window 下面
.全局变量默认挂载在window对象下
<script>
var aa = 2;
alert(window.aa);
(function () {
aa = 3;
})();
alert(window.aa);
</script&