美文网首页
闭包和引用

闭包和引用

作者: 陈柴盐 | 来源:发表于2020-01-07 15:45 被阅读0次

闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。

模拟私有变量

function Counter(start) {
    var count = start;
    return {
        increment: function() {
            count++;
        },

        get: function() {
            return count;
        }
    }
}

var foo = Counter(4);
foo.increment();
foo.get(); // 5

这里,Counter 函数返回两个闭包,函数 increment 和函数 get。 这两个函数都维持着 对外部作用域 Counter 的引用,因此总可以访问此作用域内定义的变量 count.

为什么不可以在外部访问私有变量

因为 JavaScript 中不可以对作用域进行引用或赋值,因此没有办法在外部访问 count 变量。 唯一的途径就是通过那两个闭包。

var foo = new Counter(4);
foo.hack = function() {
    count = 1337;
};

上面的代码不会改变定义在 Counter 作用域中的 count 变量的值,因为 foo.hack 没有 定义在那个作用域内。它将会创建或者覆盖全局变量 count

转载节选自:http://bonsaiden.github.io/JavaScript-Garden/zh/

相关文章

  • 闭包

    闭包的基本语法 闭包的内容捕获 闭包和函数的引用类型

  • 「JS」闭包

    闭包闭包的应用保存变量现场封装 闭包 闭包有函数和与其相关的引用环境的组合而成 闭包允许函数访问其引用环境中的变量...

  • 闭包和引用

    闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为 函数 ...

  • 闭包

    闭包概念 在计算机科学中,闭包, 又称词法闭包或函数闭包, 是引用了自由变量的函数。 这个被引用的自由变量将和这个...

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • groovy-闭包

    定义和执行闭包 闭包作为参数返回 闭包作为参数传递 闭包使用外部变量 注意: 闭包可使用(引用)闭包外部定义的变量...

  • 闭包

    闭包 本节内容包括: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 Swift 中的闭包与 C 和 Objecti...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • Swift 2 学习笔记 9.闭包

    课程来自慕课网liuyubobobo老师 闭包 闭包的基本语法 闭包语法的简化 结尾闭包 内容捕获 闭包和函数是引用类型

  • iOS闭包循环引用精讲

    iOS闭包循环引用精讲 iOS闭包循环引用精讲

网友评论

      本文标题:闭包和引用

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