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 相关文章推荐
有一段有意思的代码-javascript现实多行信息
Aug 26 Javascript
JS面向对象、prototype、call()、apply()
May 14 Javascript
Javascript 获取字符串字节数的多种方法
Jun 02 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
May 11 Javascript
jQuery操作cookie方法实例教程
Nov 25 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
May 06 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 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
PHP静态文件生成类实例
2014/11/29 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
Python读写docx文件的方法
2018/05/08 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
python中re模块知识点总结
2021/01/17 Python
美国家具网站:Cymax
2016/09/17 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
活动策划邀请函
2014/02/06 职场文书
读书演讲主持词
2014/03/18 职场文书
个人工作表现评语
2014/04/30 职场文书
演讲稿的写法
2014/05/19 职场文书
给老婆的保证书
2015/01/16 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
功夫熊猫观后感
2015/06/10 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
团队拓展训练感想
2015/08/07 职场文书
2016银行求职自荐信
2016/01/28 职场文书