zoukankan      html  css  js  c++  java
  • javascript闭包

    一。变量的作用域

    要理解闭包,首先要理解javascript特殊的变量作用域

    变量的作用域无非就两种,全局变量和局部变量

    javascript语言的特殊之处,就在于函数内部可以直接读取全局变量

    var n = 999;
    function f1(){
       alert(n)
    }
    f1();  //999

     另一方面,在函数外部自然无法读取函数内部的变量

    function f1(){
       var n = 999;
    }
    alert(n);  //error

    这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令,如果不用的话,你实际上声明了一个全局变量!

    function f1(){
        n = 999;
    }
    f1();
    alert(n);  //999

    二.如何从外部读取局部变量?

    出于种种原因,我们有时候需要得到函数内部的局部变量,但是前面已经说过了,正常情况下是办不到的,只有通过变通方法才能实现!

    那就是在函数的内部,再定义一个函数

    function f1(){
       var n = 999;
       function f2(){
          alert(n);  //999
       }
    }

    在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有布局变量,对f2都是可见的,但是反过来就不行,f2内部的布局变量,对f1是不可见的,这就是javascript语言特有的“链式作用域”结构,子对象会一级一级的向上寻找所有父对象的变量,所以,父对象的所有变量,对子对象都是可见的。反之则不成立。

    既然f2可以访问f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗

  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/woshidouzia/p/10945389.html
Copyright © 2011-2022 走看看