我们都晓得在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内一向是有定义的,并且在函数的作用域链上一向会有个对象指向全局对象,使函数可以接见到全局变量。
var ga = 'global';
var func = function() {
var la = 'local';
return function() {
return function()
{
return function()
{
alert(la);alert(ga);
}
}
}
}
a = func();
a()()();// 弹出 local 和 global
那末在外部定义的函数A, 被函数B在函数体内挪用时,A能接见到B中定义的局部变量吗?答案是否认的,把上面的例子稍作修正以下
var ga = 'global';
function repeat() {
alert(la);
}
var func = function() {
var la = 'local';
alert(1);
repeat();
alert(2);
};
func();
上面的运转结果是只弹出了1,在挪用repeat的时刻,由于接见了未定义变量js诠释器就报错把顺序中断了。
原因是函数在定义时保留了一个作用域链,repeat函数在外部定义,在他的作用域中并没有一个局部变量叫la,继承在全局作用域查找也没找到la所以就会报错。
所以嵌套函数和在函数内嵌套挪用外部函数照样有很大区分的。
昨天在回复一个题目http://segmentfault.com/q/101… 时激发的思索,虽然观点我邃晓,然则当时一向想在函数内部挪用的repeat为何接见不到挪用他的函数的局部变量,本日又翻了下参考资料本身用代码测试了一遍。愿望这篇文章能协助到有一样疑心的朋侪。