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 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
什么是 AngularJS?AngularJS简介
Dec 06 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
Jan 04 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
Dec 18 Javascript
全新打包工具parcel零配置vue开发脚手架
Jan 11 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
vue component 中引入less文件报错 Module build failed
Apr 17 Javascript
express如何解决ajax跨域访问session失效问题详解
Jun 20 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 Javascript
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
基于Zookeeper的使用详解
2013/05/02 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
java script编程起步(第三课)
2007/01/10 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python中List.count()方法的使用教程
2015/05/20 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
详解python logging日志传输
2020/07/01 Python
Python如何实现线程间通信
2020/07/30 Python
Java程序员面试90题
2013/10/19 面试题
教师实习的自我鉴定
2013/10/26 职场文书
建筑专业毕业生推荐信
2013/11/21 职场文书
英文求职信写作小建议
2014/02/16 职场文书
大学生就业意向书范文
2014/04/01 职场文书
军训拉歌口号
2014/06/13 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
走进科学观后感
2015/06/18 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js