浅谈this的指向
function hd() {
let name= '小汪'
console.log(this.name)
}
hd()
这个打印this.name 是undefined 因为,这个this是指向全局,(指向window)
因为你是在函数内部声明的变量 ,并没有挂载到window上,又因为这个hd函数是window调用的所以这个this.name是undefined
那么如果我是var呢?
来看一下打印结果
function hd() {
var name = '小汪'
console.log(this.name)
}
hd()
这个打印也是undefined 还是那句话,你在函数内部声明的话,她是不会挂载到window上
但是如果你在函数外部用var来声明你就可以拿到这个name,因为你函数外部的上级是window上,你声明的变量会挂在他的上级,所以会挂到window上也就是全局,那么你现在的this就可以拿的到
在来看下边这个栗子
var o = {
name: '李四',
fun: function () {
console.log(this.name)//李四
console.log(this)//{name: "李四", fun: ƒ}
}
}
o.fun()
你在全局声明了一个变量o 里边包含了两个元素
然后你通过o.fun去调用 变量o里边的函数,所以他的this.name会指向李四,他的this指向是对象o
如果是普通函数你可以这样简单粗暴一点理解,我是被谁调用的?我就指向谁,通过这个例子 可以看到他是被对象0调用的,所以他就指向o ,那么打印就是o下边的李四,
如果是箭头函数 例如
var arrows = {
sex: '男',
fun: {
age: '20',
fun: (() => {
console.log(this.sex) //undefined
console.log(this.arrows)//打印当前对象
})
}
}
arrows.fun.fun()
这个我也是通过对象去调用的, 箭头函数不管你写在第几层,他的指向都是window,所以你打印this.sex是指向不到,通过打印this.arrows可以看到 是可以找到的,因为你var声明的是挂在全局的,所以是可以拿到的。
总结一句话:如果是普通函数,谁调用我就指向谁,箭头函数的指向是全局,也就是说箭头函数的指向如全局 或则说第一层,
个人理解,有不对的地方,欢迎指出

浙公网安备 33010602011771号