美文网首页
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中闭包及如何用闭包定义私有产量

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

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

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

  • iOS开发之Swift篇(7)—— 闭包

    目录 版本 闭包的定义及使用 尾随闭包 逃逸闭包 版本 Xcode 11.0Swift 5.1 闭包的定义及使用 ...

  • 函数

    封闭函数 用变量的方法定义函数 闭包 闭包存循环的索引值 闭包做私有变量计算器 闭包做选项卡

  • js封闭函数、闭包

    1、封闭函数 2、用变量的方式定义函数 3、闭包 4、闭包存循环的索引值 5、闭包做私有变量计数器 6、闭包做选项...

  • 前端笔记13

    封闭函数 用变量的方式定义函数 闭包 闭包存循环的索引值 闭包做私有变量计数器 闭包做选项卡 跳转原页面 获取地址...

  • 15day-封闭函数闭包

    封闭函数 用变量的方式定义函数 闭包 闭包存循环的索引 闭包做私有变量计数器 (6)闭包做选项卡 (8)跳转的源页面

  • swift-闭包

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

  • 2019前端面试题

    闭包:JS中,提供了一种"闭包"的概念:在函数内部,定义一个子函数,可以用子函数访问父函数的私有变量。执行完操作以...

  • php之闭包函数(Closure)

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

网友评论

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

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