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 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
仿新浪微博登陆邮箱提示效果的js代码
Aug 02 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
jQuery中filter()方法用法实例
Jan 06 Javascript
简单实现JS对dom操作封装
Dec 02 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
Node.js编写CLI的实例详解
May 17 Javascript
微信小程序获取循环元素id以及wx.login登录操作
Aug 17 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
微信小程序合法域名配置方法
May 06 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
PHP经典的给图片加水印程序
2006/12/06 PHP
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
php生成excel列序号代码实例
2013/12/24 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
javascript History对象原理解析
2020/02/17 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
实例Python处理XML文件的方法
2015/08/31 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
一套Delphi的笔试题一
2016/02/14 面试题
质检部岗位职责
2013/11/11 职场文书
交通事故检查书范文
2014/01/30 职场文书
消防安全汇报材料
2014/02/08 职场文书
1000字打架检讨书
2014/11/03 职场文书
公务员个人年终总结
2015/02/12 职场文书
答辩状格式范本
2015/05/22 职场文书
培训简讯范文
2015/07/20 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
品德与社会教学反思
2016/02/24 职场文书