时间:2021-05-26
我们都知道在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内始终是有定义的,并且在函数的作用域链上始终会有个对象指向全局对象,使函数能够访问到全局变量。
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所以就会报错。
所以嵌套函数和在函数内嵌套调用外部函数还是有很大区别的。
昨天在回答一个问题时引发的思考,虽然概念我明白,但是当时一直想在函数内部调用的repeat为什么访问不到调用他的函数的局部变量,今天又翻了下参考资料自己用代码测试了一遍。希望这篇文章能帮助到有同样困惑的朋友。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在javascript中允许使用嵌套函数:嵌套函数[Ctrl+A全选注:引入外部Js需再刷新一下页面才能执行]记住这名话:嵌套实际是要实现一种循环,是循环就有双
以c语言为例,其函数的定义不能嵌套,但是调用可以嵌套。函数不能嵌套定义是由于语法不支持造成在函数定义的内部不能定义函数。C语言中函数的定义都是相互平行、相互独立
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。闭包有三个特性:1.函数嵌套函数2.函数内部可以引用外部
本文实例讲述了JavaScript直接调用函数与call调用的区别。分享给大家供大家参考,具体如下:直接调用直接调用函数是最常见最普通的方式,直接以函数附加的对
在JavaScript1.2之前,函数定义是只允许在顶层全局代码,但1.2的JavaScript可以嵌套函数定义其他函数中也是可以的。仍然存在的函数定义可以循环