javascript嵌套函数和在函数内调用外部函数的区别分析_javascript技巧
程序员文章站
2022-04-28 15:28:04
...
我们都知道在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内始终是有定义的,并且在函数的作用域链上始终会有个对象指向全局对象,使函数能够访问到全局变量。
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://www.jb51.net/article/78958.htm时引发的思考,虽然概念我明白,但是当时一直想在函数内部调用的repeat为什么访问不到调用他的函数的局部变量,今天又翻了下参考资料自己用代码测试了一遍。希望这篇文章能帮助到有同样困惑的朋友。
上一篇: ps如何修改手臂粗细
下一篇: PHP中Push(推送)技术的探讨
推荐阅读
-
JavaScript直接调用函数与call调用的区别实例分析
-
JS嵌套函数调用上下文的问题解决_javascript技巧
-
JS嵌套函数调用上下文的问题解决_javascript技巧
-
javascript嵌套函数和在函数内调用外部函数的区别分析_javascript技巧
-
js中匿名函数的创建与调用方法分析_javascript技巧
-
JavaScript:new 一个函数和直接调用函数的区别分析_javascript技巧
-
JavaScript:new 一个函数和直接调用函数的区别分析_javascript技巧
-
JavaScript整除运算函数ceil和floor的区别分析_javascript技巧
-
JavaScript中判断函数是new还是()调用的区别说明_javascript技巧
-
javascript嵌套函数和在函数内调用外部函数的区别分析_javascript技巧