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 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
js电信网通双线自动选择技巧
Nov 18 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
js实现数组去重方法及效率?Ρ? target=
Feb 14 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
vue的mixins属性详解
Mar 14 Javascript
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 Javascript
简单了解vue 插值表达式Mustache
Jul 22 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
php阳历转农历优化版
2016/08/08 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
jQuery过滤选择器用法分析
2015/02/10 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
Python 爬虫的原理
2020/07/30 Python
python实现canny边缘检测
2020/09/14 Python
python利用线程实现多任务
2020/09/18 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
在线课程:Skillshare
2019/04/02 全球购物
创新比赛获奖感言
2014/02/13 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
电话营销开场白
2015/05/29 职场文书
摘录式读书笔记
2015/07/01 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python