var fn1 = function(){var a=1alert(a)fn2=function(){console.log(a);}}fn1();fn2(); 这样的话全局的fn2,读取用到了局部函数fn1的var a=1?不符合作用域链啊?
1 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
函数fn2就被包括在函数fn1内部,这时fn1内部的所有局部变量,对fn2都是可见的,但是对于fn2来说是改变不了fn1任何局部变量的值的。
同时fn2内部的局部变量,对fn1是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。
所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
var fn2; // 此时fn2为undefined
var fn1 = function () {
var a = 1
// alert(a)
// 重新定义fn2为一个函数,因此可以在外部调用fn2
fn2 = function () {
a = 4;
console.log('fn2',a);
fn1();
}
console.log('fn1',a);
}
fn1();
fn2();
添加回答
举报
0/150
提交
取消