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 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
jQuery each()小议
Mar 18 Javascript
js中的异常处理try...catch使用介绍
Sep 21 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
详解Javascript中的原型OOP
Oct 12 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
vue2中的keep-alive使用总结及注意事项
Dec 21 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 Javascript
vue+iview实现文件上传
Nov 17 Vue.js
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开发中常用的字符串操作函数
2011/02/08 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python通过future处理并发问题
2017/10/17 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python实战购物车项目的实现参考
2019/02/20 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
劳动之星获奖感言
2014/02/01 职场文书
员工生日活动方案
2014/08/24 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
公司安全管理制度范本
2015/08/05 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python