this 是什么?
闭包中内部函数this的指向
一 this 是什么?
1.this 是一个关键字,是函数体内的隐式参数,
2.this就是记录函数调用上下文的一个属性。可以在函数体中使用this引用函数的调用上下文。
3.this的绑定关注的是函数的调用位置。
4.因为 js是一个弱类型和动态类型的 编程语言,就导致this的环境是变化的。this 就是函数运行时所在的的对象环境。
二 闭包中内部函数this的指向
先看这个列子:
window.identity = 'The Window';
let object = {
identity: 'My Object',
getIdentityFunc() {
return function () {
return this.identity
}
}
}
console.log(object.getIdentityFunc()());
打印结果:
The Window
原因:
在闭包中使用this会让代码变得复杂。
1. 如果内部函数没有使用箭头函数定义,则this对象会在运行时绑定到 执行函数的上下文。
2 . 如果在全局函数中调用,则this 在非严格模式下等于window,在严格模式下等于undefined.
3 .如果作为某个对象的方法调用,则this等于这个对象。
4 .匿名函数在这种情况下 不会绑定到某一个对象,这就意味着this会指向window,除非在严格模 式下this是undefined.
不过,由于闭包的写法所致,这个事实有时候没有那么容易看出来。
解决方案:
每个函数在被调用时都会自动创建两个特殊变量,this和arguments.内部函数永远不可能直接访问外部函数的着两个变量。但是,如果把外部函数this保存到变量中,则行得通。
看第二个如下列子:
let object1 ={
identity:'My Object',
getIdentityFunc(){
let that=this
return function(){
return that.identity
}
}
}
console.log(object1.getIdentityFunc()());
打印结果:
My Object