美文网首页
JS闭包和匿名函数

JS闭包和匿名函数

作者: Zoro_stack | 来源:发表于2016-09-07 01:26 被阅读0次

研究了数小时的JS闭包,终于有所收获了,网上有很多关于闭包的研究,在这里我就只说说个人理解,如果有错误望指出加以改正!
闭包的几个关键词:函数嵌套,自由变量,内部函数调用自由变量!
直接上代码(困扰了我很长时间):

var result = [];
function fn() {
    for (var i = 0; i < 5; i++) {
      result[i] = function() {
        console.log(i);
      }
    }
}
fn();
result[0]();
result[1]();
result[2]();

相信很多人对这段代码并不陌生,打印结果肯定都是一样的都是5!
解释如下:
fn()函数调用完成后已经完成了遍历过程此时 i 已经递增到5了,但是此时由于闭包,内部的 i 并未销毁,于是调用result0可以取出 i 的值为5!
那如何让其输出递增值呢?有很多方案,我只列出让我困扰了很久的其中一种!

 var result = [];
function fn() {
    for (var i = 0; i < 5; i++) {
      result[i] = (function(n) {
        return function() {
          console.log(n);
        }
      })(i);
    }
}
fn();
result[0]();
result[1]();
result[2]();

分析:
现在我们将此结构分为三层函数,最外层的fn,中间层的自执行的匿名函数,最里层的匿名函数。
为何这样就可以输出递增值呢?其实很简单,中间层的自执行的匿名函数将自由变量 i 传入后保护了 i 不被外界改变,所以每次循环得到的 i 都被保护到中间层的自执行的匿名函数内了!
经分析,这段小小的代码却包含了大量的JS知识啊,闭包以及自执行的匿名函数,真可谓经典!但同时也会发现闭包很是占用内存,至于优化方面还有待去学习!

相关文章

  • js循环引用引起的内存泄漏示例

    Js中存在和OC同等意义的闭包(block& closure)闭包可看作匿名函数,例如: 函数中 给element...

  • PHP闭包

    一. 闭包函数又叫做匿名函数(没有函数名称的函数). 英文closure 匿名函数常在js函数中出现,比如ajax...

  • JS闭包和匿名函数

    研究了数小时的JS闭包,终于有所收获了,网上有很多关于闭包的研究,在这里我就只说说个人理解,如果有错误望指出加以改...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • 闭包

    闭包 闭包和函数的区别:闭包可以储存一部分变量,函数不能,函数传什么有什么值 函数与匿名函数的区别,匿名函数可以完...

  • 后端程序员的 JavaScript 之旅 - 模块化(一)

    基础模式 匿名闭包 匿名闭包是很常用的代码隔离方式,声明匿名对象并立即执行。匿名函数中声明的变量和方法以及匿名函数...

  • Modern PHP : 闭包和匿名函数

    Modern PHP : 闭包和匿名函数

  • 理解javascript(匿名函数和闭包)这篇文章就够了

    匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。 一.匿名函数 二:闭包 闭包的概念:闭包是指...

  • Swift-闭包

    闭包的特点:一个函数有权访问另外一个函数内的变量和参数 闭包—匿名函数 结尾闭包 衍生 内容捕获 闭包和函数是引用类型

  • JS之匿名函数和闭包

    函数表达式 有两种方式:1、函数声明2、函数表达式函数声明会提升,函数表达式不会。函数声明,在执行函数之前会先读取...

网友评论

      本文标题:JS闭包和匿名函数

      本文链接:https://www.haomeiwen.com/subject/ykhjettx.html