• 技术文章 >web前端 >js教程

    JavaScript中闭包的含义是什么以及如何使用它

    清浅清浅2018-11-21 14:16:10原创1283
    本文章将分享有关JavaScript中闭包的知识点,有一定的参考价值,希望对大家有所帮助

    闭包是函数和声明该函数的词法环境的组合,当内部函数被保存到外部时,将会生成闭包而闭包会导致原有作用域链不释放,造成内存泄露,但同时闭包也是非常有用的,因为它可以将某些数据与对该数据的操作进行关联。

    例:

    function demo() {
      var name = '张三'; // name 是demo()创建的局部变量
      function demo1() { //demo1()是demo()中的内部函数(闭包)
        console.log(name); // 使用父函数中声明的变量  
        }
      demo1();  
        }demo();

    运行结果

    Image 1.jpg

    函数demo()中创建一个名为name的局部变量和一个名为demo1()的内部函数。 demo1()函数只能在demo()函数体内使用。 demo1没有自己的局部变量。但是由于内部函数可以访问外部函数的变量,所以demo1()可以访问父函数demo()中声明的变量名name。但是如果有同名变量 name 在demo1中被定义,则会使用 自己函数中定义的 name。该例子说明嵌套函数可以访问在其外部作用域中声明的变量。

    如果上面的代码改成这样结果会如何?

    function demo() {
      var name = '张三';
      function demo1() {
        console.log(name);
      }
      return demo1;
      }
      var newDemo = demo();
      newDemo();

    运行结果

    Image 1.jpg

    由运行结果可知两段代码结果一样,内部函数demo1()在执行之前被外部函数返回形成闭包,在这种情况下,newDemo()是运行demo时所创建的函数demo1的一个引用,所以当调用newDemo()时,变量名name仍可以传递给console.log(name)。

    示例

    function num(x) {
      return function(y) {
        return x + y;
      };}
      var num1= num(2);
      var num2 = num(3);
      console.log(num1(2));// 4
      console.log(num2(2));// 5

    运行结果

    Image 2.jpg

    定义一个函数num(x)用于接收一个参数x并返回一个新函数,这个新函数还接收一个参数y并返回x和y之和;同时又定义了两个新的值num1,num2都为闭包且传值分别为2,3.

    总结:以上就是本文章分享的内容了,希望对大家有所帮助。

    以上就是JavaScript中闭包的含义是什么以及如何使用它的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:闭包
    上一篇:React中类型检查的介绍 下一篇:jQuery中bind()方法如何使用

    相关文章推荐

    • 一分钟理解js闭包_javascript技巧• javascript中的作用域和闭包详解_javascript技巧• javascript中闭包(Closure)详解_javascript技巧

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网