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 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
基于JQuery的Pager分页器实现代码
Jul 17 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
js中confirm实现执行操作前弹出确认框的方法
Nov 01 Javascript
javascript 原型链维护和继承详解
Nov 26 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
页面内锚点定位及跳转方法总结(推荐)
Apr 24 Javascript
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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基于单例模式实现的数据库操作基类
2016/01/15 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python的Tqdm模块的使用
2018/01/10 Python
python语言元素知识点详解
2019/05/15 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
股份转让协议书范本
2015/01/27 职场文书
导游词之包公祠
2019/11/25 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android