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 相关文章推荐
jquery.ui.draggable中文文档
Nov 24 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
js实现图片无缝滚动
Dec 23 Javascript
express文件上传中间件Multer详解
Oct 24 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
js实现单张图片平移切换效果
Oct 11 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
Nov 16 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
Vue+Java+Base64实现条码解析的示例
Sep 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php中stream(流)的用法
2014/03/25 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
jQuery的框架介绍
2016/05/11 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
python实现大转盘抽奖效果
2019/01/22 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
python的scipy实现插值的示例代码
2019/11/12 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
MySQL存储过程及语法详解
2022/08/05 MySQL