美文网首页
JavaScript 闭包

JavaScript 闭包

作者: 二郎袁 | 来源:发表于2016-01-14 15:17 被阅读48次

廖雪峰《JavaScript教程》 闭包
http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143449934543461c9d5dfeeb848f5b72bd012e1113d15000

以下两例均为教程中示例的引申。
例一:

    var f1, a = [1, 2, 3, 4];

    function lazy_sum(arr) {
        return function() {
            return arr.reduce(function(x, y) {
                return x + y;
            });
        }
    }

    f1 = lazy_sum(a);
    alert(f1()); //10
    a[0] = 0;
    alert(f1()); //9, not 10

闭包就是携带(绑定)状态的函数。这个例子中,return 的闭包函数体中引用了外部函数级变量arr,它携带的状态就是arr 所映射的实体,对于可变变量,更新数组a中元素,引起实体变化,闭包运行结果随之变化。

例二:

    function count1() {
        var arr = [];
        for (var i = 1; i <= 3; i ++) {
            arr.push(function () {
                return i * i;
            });
        }
        return arr;
    }
    var arr1 = count1();
    var f1 = arr1[0]
    alert(f1()) //16

    function count2() {
        var arr = [];
        for (let i = 1; i <= 3; i ++) {
            arr.push(function () {
                return i * i;
            });
        }
        return arr;
    }
    var arr2 = count2();
    var f2 = arr2[0]
    alert(f2()) //1

    function count3() {
        var arr = [];
        for (var i = 1; i <= 3; i ++) {
            arr.push((function (i) {
                return function () {
                    return i * i;
                }
            })(i));
        }
        return arr;
    }
    var arr3 = count3();
    var f3 = arr3[0];
    alert(f3()); //1

count1 中闭包绑定的i 是count1 的函数级变量。
count2 中闭包绑定的i 是块级变量(let),每次块结束这个变量就固定下来了。
count3 中闭包绑定的i 是闭包的上层函数的函数级变量,互不想干。

相关文章

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • javascript中闭包是什么

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就...

  • Javascript 闭包

    闭包 (注:所以案例以 javascript 实现) 初识闭包 什么是闭包 MDNClosures are fun...

  • 作用域闭包

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • JavaScript 作用域

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • 20170815 前端开发日报

    JavaScript闭包,只学这篇就够了 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭...

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • 闭包

    学习Javascript闭包(Closure)

  • JS之闭包与IIFE

    本篇文章主要讨论了: JavaScript引擎 全局对象 闭包 循环 + 闭包 IIFE + 闭包 1.JavaS...

网友评论

      本文标题:JavaScript 闭包

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