Closed colorfulWorld closed 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 函数将在哪里调用。
所以,不要在用以上说法了。相比而言,用这句话描述会更加贴切:要到创建这个函数的那个域”。 作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记——其实这就是所谓的”静态作用域”
各种不同形式的复杂闭包写法情况下,就喜欢同理this 的指向去找作用域链,总是在复杂的写法下忽视了这句:this 是在调用时决定的,作用域链是在声明时决定的(静态作用域)。
在 fn 函数中,取自由变量 x 的值时,要到哪个作用域中取?——要到创建 fn 函数的那个作用域中取,无论 fn 函数将在哪里调用。
所以,不要在用以上说法了。相比而言,用这句话描述会更加贴切:要到创建这个函数的那个域”。 作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记——其实这就是所谓的”静态作用域”