• 闭包


    /*闭包
    要理解闭包,首先必须理解js特殊的变量作用域。变量的作用域无非就是两种,全局与局部变量
    且函数内部可以直接读取到全局变量
    * */

    var n=999;
    function f1() {
    alert(n);
    }
    f1();//99
    //在函数外部自然无法读取函数内的局部变量
    function f2(){
    var a=8; //函数内部声明变量的时候,一定要使用var命令,否则实际上声明了一个全局变量
    }
    // alert(a)//defined

    //如何从外部读取局部变量,由于各种原因,我们有时候需要得到函数内部的局部变量,但是前面已经说过,正常情况下是取不到的,只有通过变通方法才能实现 那就是在函数的内部,在定义一个函数

    function fn(){
    var n=999;
    function fn2(){
    alert(n);//99
    }
    }
    //在上面代码中,函数fn2就被包括在函数fn内部,这时fn内部的所有局部变量对fn2都是可见的,但是返过来就不行,fn2内部的局部变量,对fn就是不可见的,这就是js语言特有的链式作用域结构,子对象会一级一级的向上寻找所有父对象的变量,所以,父对象的所有变量,对子对象都是可见的,反之则不成立 既然fn2可以读取fn的局部变量,那么只要把fn2作为返回值,我们不就可以在f1外部读取它的内部变量了吗


    function fn3(){
    var n=666;
    function fn4(){
    alert(n);
    }
    return fn4;
    }
    var result = fn3();
    result();//666

    //闭包概念 上边代码中的fn4函数就是闭包 ,闭包就是能够读取其他函数内部变量的函数 , 在js语言中,只有函数内部才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数” 本质上说闭包其实就是将函数内部和函数外部连接起来的一座桥梁

    //闭包的用途 闭包可以用在很多地方,他的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中
    function fnn(){
    var n=999;
    nAdd=function(){
    n+=1;
    }
    function fnn2(){
    alert(n);
    }
    return fnn2;
    }

    var result=fnn();
    result();//999

    nAdd();
    result();//1000

  • 相关阅读:
    MySQL 中now()时间戳用法
    ajax local.href不跳转的原因之一
    Call to a member function select() on string错误
    TP框架中ajax post请求时提示404
    TP框架中field查询字段
    jQuery如何获得select选中的值?input单选radio选中的值
    TP框架中session操作
    InnerHtml() 与html( )的区别
    C++开源项目等收集
    RCU-数据库初始化参数
  • 原文地址:https://www.cnblogs.com/h5it/p/9274435.html
Copyright © 2020-2023  润新知