返回信息流比如:
```let obj ={
func1:function(func){
func();
}
}
obj.func1(()=>{console.log(this)});```
这里this值为什么会指向window呢? 作为参数的箭头函数它的作用域链是什么样的?
[ema1]
[ema1]
这是一条镜像帖。来源:北邮人论坛 / java-script / #3913同步于 2018/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖
关于箭头函数this的小疑问。。。
ColaeR
2018/6/8镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
箭头只是语法糖,如果你在箭头出现之前使用过var that = this 或者var self = this这样的写法保存this就很容易理解了,箭头在这方面只是使你不必使用上面这些丑陋的写法的语法糖。
只要记住一点,箭头函数的this指向是在箭头函数的声明处就确定了,即声明处的上下文,与在何处调用无关。
你的例子,在上下文为 window 下定义了箭头函数,不论在哪里运行,都指向 window。
箭头函数不是在 obj.func1()里面定义的吗?上下文为什么是 window 呢?
【 在 MrWanted 的大作中提到: 】
: 只要记住一点,箭头函数的this指向是在箭头函数的声明处就确定了,即声明处的上下文,与在何处调用无关。
: 你的例子,在上下文为 window 下定义了箭头函数,不论在哪里运行,都指向 window。
要知道 js 变量的作用域是函数作用域,小括号里的不算新的函数作用域
```
function ( // 这里不算 ) {
// 这里的才算
}
```
【 在 szm1002 的大作中提到: 】
: 箭头函数不是在 obj.func1()里面定义的吗?上下文为什么是 window 呢?
不是啊。那个箭头函数只是obj.func1的参数,这个参数其实是在函数外定义的呀,只不过省去了定义一个变量,给变量赋值,再传入obj.func1的过程...
【 在 szm1002 的大作中提到: 】
: 箭头函数不是在 obj.func1()里面定义的吗?上下文为什么是 window 呢?
了解了,谢谢大佬
【 在 LeeSir 的大作中提到: 】
: [md]
: 要知道 js 变量的作用域是函数作用域,小括号里的不算新的函数作用域
: ```
Get,谢谢大佬
【 在 MrWanted 的大作中提到: 】
: 不是啊。那个箭头函数只是obj.func1的参数,这个参数其实是在函数外定义的呀,只不过省去了定义一个变量,给变量赋值,再传入obj.func1的过程...