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日历实现代码
Sep 12 Javascript
JavaScript之引用类型介绍
Aug 10 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
jQuery右下角旋转环状菜单特效代码
Aug 10 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
超链接怎么正确调用javascript函数
May 23 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
AngularJS Ajax详解及示例代码
Aug 17 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
vue中使用vue-print.js实现多页打印
Mar 05 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 11 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
javascript 一些用法小结
2009/09/11 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
koa-router源码学习小结
2018/09/07 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
python字典值排序并取出前n个key值的方法
2018/10/17 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
NumPy统计函数的实现方法
2020/01/21 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
浅谈django channels 路由误导
2020/05/28 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
python中count函数知识点浅析
2020/12/17 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
幼儿园中班新学期寄语
2014/01/18 职场文书
质量承诺书范文
2014/03/27 职场文书
企业承诺书格式
2014/05/21 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
Nginx如何配置根据路径转发详解
2022/07/23 Servers