function shit(){
console.log(a)
}
function fuck(callback) {
var a = 'shit';
callback() //error: 'a' undefined
}
fuck(shit)
为什么callback不能找到变量a?
下面就可以
function shit(){
console.log(a)
}
function fuck(callback) {
var a = 'shit';
function hey() {
console.log(a)
}
hey()
}
fuck(shit)
JS里变量的查找,是按照函数定义的位置,而不是调用的位置确定的。
比较简明的说是:
第一个是函数调用。
fuck
只是调用了shit
,shit
的定义不在fuck
中而是在全局,所以shit
的外层并不是fuck
,它的外层是全局。第二个
hey
的的定义在fuck
中,所以其外层就是fuck
,故当hey
中没有定义这个变量时候就会查找fuck
生成的作用域。如果fuck
中还没有就继续查找fuck
的外层,也就是全局。详细的参考:http://zonxin.github.io/post/...