我在Java中也读到匿名函数在封闭函数中引入了一个新的作用域,而lambda表达式是块本地的。这意味着上面的内容。我对以下示例感到困惑:
var timer = {
seconds: 0,
start() {
setInterval(() => {
this.seconds++
}, 1000)
}
}
// When an item is searched, it starts from the anonymous function
// and this doesn't mean the same as parent this.
// This means that we can access this .seconds by first going to
// its enclosing function in the arrow expression.
timer.start()
setTimeout(function () {
console.log(timer.seconds)
}, 3500)
这里this.seconds将在封闭函数中引入一个新的范围,如果它是一个匿名函数。我对吗? Static (Lexical) Scoping vs Dynamic Scoping (Pseudocode)
答案 0 :(得分:0)
这里的区别是this
。箭头函数不会更改this
的值,而使用function
关键字创建的函数则会更改。{/ p>
这就是为什么上面的代码与以下代码之间存在差异:
var timer = {
seconds: 0,
start() {
setInterval(function(){
this.seconds++
}, 1000)
}
}
// When an item is searched, it starts from the anonymous function
// and this doesn't mean the same as parent this.
// This means that we can access this .seconds by first going to
// its enclosing function in the arrow expression.
timer.start()
setTimeout(function () {
console.log(timer.seconds)
}, 3500)
在此代码中,function(){
会将this
的值覆盖为自身,因此不再有秒变量。
传统的匿名函数和箭头函数之间的范围(函数可以访问哪些变量)没有区别,只有传统的匿名函数创建新的this
而箭头函数没有。