如何顺着作用域链寻找变量?
- 函数在执行过程中,先从自己内部找变量
- 如果找不到,再从 创建当前函数所在作用域 去找,以此往上
根据这个顺序,我们来看三道题目及解析:
var a = 1
function fn1(){
function fn2(){
console.log(a) //fn2()内部作用域没有变量a, 只能从创建fn2()的作用域中找,找到var a=2
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //输出2
var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a) //fn2()内部作用域没有变量a, 只能从创建fn2()的作用域中找,找到var a=1
}
var fn = fn1()
fn() //输出1
var a = 1 // 第一步
function fn1(){
function fn3(){
function fn2(){
console.log(a) //fn2()内部作用域没有变量a, 只能从创建fn2()的作用域中找
//找到var a,但未赋值
}
var a //第五步
fn2() //第六步
var a = 4 // 此语句被忽略
}
var a = 2 //第三步
return fn3 //第四步
}
var fn = fn1() //第二步
fn() //输出undefined











网友评论