美文网首页
js中闭包及如何用闭包定义私有产量

js中闭包及如何用闭包定义私有产量

作者: 清白NLY | 来源:发表于2017-09-15 08:15 被阅读0次

    1、闭包

    对于闭包(closure),当外部函数返回之后,内部函数依然可以访问外部函数的变量。

    function f1()

    {

        var N = 0; // N是f1函数的局部变量

        function f2() // f2是f1函数的内部函数,是闭包

        {

            N += 1; // 内部函数f2中使用了外部函数f1中的变量N

            console.log(N);

        }

        return f2;

    }

    var result = f1();

    result(); // 输出1

    result(); // 输出2

    result(); // 输出3

    代码中,外部函数f1只执行了一次,变量N设为0,并将内部函数f2赋值给了变量result。由于外部函数f1已经执行完毕,其内部变量N应该在内存中被清除,然而事实并不是这样:我们每次调用result的时候,发现变量N一直在内存中,并且在累加。为什么呢?这就是闭包的神奇之处了。

    2、使用闭包定义私有变量

    通常,JavaScript开发者使用下划线作为私有变量的前缀。但是实际上,这些变量依然可以被访问和修改,并非真正的私有变量。这时,使用闭包可以定义真正的私有变量:

    function Product() {

      var name;

        this.setName = function(value) {

            name = value;

        };

        this.getName = function() {

            return name;

        };

    }

    var p = new Product();

    p.setName("Fundebug");

    console.log(p.name); // 输出undefined

    console.log(p.getName()); // 输出Fundebug

    代码中,对象p的的name属性为私有属性,使用p.name不能直接访问。

    相关文章

      网友评论

          本文标题:js中闭包及如何用闭包定义私有产量

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