colorfulWorld / marks

常用学习书签
1 stars 0 forks source link

作用域链 #2

Closed colorfulWorld closed 3 years ago

colorfulWorld commented 3 years ago

各种不同形式的复杂闭包写法情况下,就喜欢同理this 的指向去找作用域链,总是在复杂的写法下忽视了这句:this 是在调用时决定的,作用域链是在声明时决定的(静态作用域)。

var x = 10
function fn() {
  console.log(x)
}
function show(f) {
  var x = 20
  (function() {
    f() //10,而不是20
  })()
}
show(fn)

在 fn 函数中,取自由变量 x 的值时,要到哪个作用域中取?——要到创建 fn 函数的那个作用域中取,无论 fn 函数将在哪里调用。

所以,不要在用以上说法了。相比而言,用这句话描述会更加贴切:要到创建这个函数的那个域”。 作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记——其实这就是所谓的”静态作用域”

  1. 作用域
  2. 深入理解 JavaScript 作用域和作用域链
  3. 用 const 和 let 声明的变量在哪里
  4. 作用域链 & 闭包