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

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不能直接访问。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zock阅读 1,141评论 2赞 6
  • ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...
    lzyuan阅读 1,095评论 0赞 0
  • 卡尔维诺中文站留言板这个帖子专门用作卡尔维诺中文站的留言板,欢迎大家留言和提问。...阮一峰2007-01-04T...
    舟渔行舟阅读 439评论 0赞 1
  • 记录一下 主要是自己很少用,所以记录一下。
    FlowYourHeart阅读 459评论 0赞 0
  • 我想说我不是开淘宝店的,是一枚主要工作是逛淘宝找东西的软妹子,给大家分享点我喜爱的小物。 可爱萌萌的表情花盆 胖嘟...
    橘子和她的一世长安阅读 486评论 2赞 1

友情链接更多精彩内容