闭包变量提升理解

    xiaoxiao2021-03-25  126

    变量提升

    var a="hello world"

    function fun(){

    console.log(a);

    var a="hello nick"

    console.log(a);

    }

    fun();

    //第一个输出是undefined 然后是 hello nick

     因为这里变量发生了提升 转换后的代为为

    var a="hello world";

    function fun(){

    var a;

    console.log(a);

    a="hello nick";

    console.log(a)

    }

    闭包:能够访问函数内部变量的函数

    为什么要用:

    1、便于代码的理解

    2、减少全局变量的声明

    3、保证键值对不随上一级函数的执行完成而销毁

    function fun1(){

    var n=1;

    nadd=function(){

    n+=1;

    }

    function fun2(){

    console.log(n);

    }

    }

    var result =fun1();

    result();//1

    nadd();

    result();//2

    1. var result=fun1(); 返回了一个函数f1, 因此result为f1。 2. result(); 调用fun2,显然输出1. 3. nAdd(); 这里需要注意,这个nAdd实际上在定义的时候是一个lambda,是一个匿名函数,功能是n+=1。定义时将这个函数赋值给nAdd。所以在此时,实际上是调用了n+=1.为什么能找到n?因为n在堆里面。 4. result(); 调用f2,显然输出2.

    最后一点,n在堆上如何被销毁,这个工作是垃圾收集器负责。当n不在被任何闭包的env引用的时候,会被回收。

    转载请注明原文地址: https://ju.6miu.com/read-3532.html

    最新回复(0)