JS闭包的几种常见形式实例详解


Posted in Javascript onSeptember 16, 2017

作用域链:

//作用域链
  var a = 1;
  function test() {
    var b =2;
    return a;
  }
  alert(test());//弹出1;
  alert(b);//不能获取b
//scope chain
  var a = 1;
  function test() {
    var b = 2;
    function test1() {
      var c = 3;
      alert(a);
      alert(b);
      alert(c);
    }
    test1();
  }
  test();//弹出1,弹出2,弹出3;

词法作用域:

//词法作用域;
  function f1() {
    var a = 12;
    return f2();
  }
  function f2() {
    return a;
  }
  alert(f1());//并不能获取a,a在f2()中并未定义;
function f1() {
    var a = 1;
    return f2();
  }
  function f2() {
    var b = 3;
    alert(b);
    return a;
  }
  alert(f1());//弹出3,a在f2()中未定义

function f1() {
    var a = 1;
    return f2();
  }
  function f2() {
    var b = 3;
    alert(b);
    return a;
  }
  alert(f1());//弹出3,a在f2()中未定义,undefined
  var a=55;
  alert(f1());//弹出3,弹出55

如何通过闭包突破全局作用域链——几种常见形式

//通过闭包突破全局作用域链
  function f() {
    var a = "sun";
    return function () {
      return a;
    }
  }
  var test = f();
  alert(test());//弹出sun
var n;
function f() {
  var a = "sun";
  n = function () {
    return a;
  }
}
f();
alert(n());//弹出sun
  function f(param) {
    var n =function () {
      return param;
    };
    param++;
    return n;
  }
  var test = f(45);
  alert(test());//弹出46;

总结

以上所述是小编给大家介绍的JS闭包的几种常见形式 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
如何实现动态删除javascript函数
May 27 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
jQuery中slice()方法用法实例
Jan 07 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
js运动动画的八个知识点
Mar 12 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
vue如何通过id从列表页跳转到对应的详情页
May 01 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 Javascript
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 #Javascript
详解JS构造函数中this和return
Sep 16 #Javascript
Angular使用Md5加密的解决方法
Sep 16 #Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 #Javascript
EasyUI创建人员树的实例代码
Sep 15 #Javascript
webpack构建react多页面应用详解
Sep 15 #Javascript
详解Vue中一种简易路由传参办法
Sep 15 #Javascript
You might like
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Vue-cli3多页面配置详解
2020/03/22 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python双向循环链表实现方法分析
2018/07/30 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python中while和for的区别总结
2019/06/28 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
模具专业毕业推荐信
2014/03/08 职场文书
周年庆典主持词
2014/04/02 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
golang json数组拼接的实例
2021/04/28 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang