javascript嵌套函数和在函数内调用外部函数的区别分析


Posted in Javascript onJanuary 31, 2016

我们都知道在函数中定义的局部变量在声明他的函数体以及其嵌套的函数内始终是有定义的,并且在函数的作用域链上始终会有个对象指向全局对象,使函数能够访问到全局变量。

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所以就会报错。

所以嵌套函数和在函数内嵌套调用外部函数还是有很大区别的。

昨天在回答一个问题https://3water.com/article/78958.htm时引发的思考,虽然概念我明白,但是当时一直想在函数内部调用的repeat为什么访问不到调用他的函数的局部变量,今天又翻了下参考资料自己用代码测试了一遍。希望这篇文章能帮助到有同样困惑的朋友。

Javascript 相关文章推荐
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
js图片处理示例代码
May 12 Javascript
javascript实现获取字符串hash值
May 10 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
element中的$confirm的使用
Apr 26 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
JavaScript中eval函数的问题
Jan 31 #Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 #Javascript
JavaScript中的this机制
Jan 30 #Javascript
实现高性能JavaScript之执行与加载
Jan 30 #Javascript
深入探秘jquery瀑布流的实现
Jan 30 #Javascript
深入分析Javascript事件代理
Jan 30 #Javascript
详解javascript实现瀑布流列式布局
Jan 29 #Javascript
You might like
终于听上了直流胆调频
2021/03/02 无线电
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
Python基于time模块求程序运行时间的方法
2017/09/18 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
python开发入门——列表生成式
2020/09/03 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
美容师的职业规划书
2013/12/27 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
销售求职信范文
2014/05/26 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
员工趣味活动方案
2014/08/27 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
员工表扬信怎么写
2015/05/05 职场文书
经营目标责任书
2015/05/08 职场文书
社区服务理念口号
2015/12/25 职场文书
电力培训学习心得体会
2016/01/11 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android
Springboot中如何自动转JSON输出
2022/06/16 Java/Android