闭包 变量提升理解

变量提升

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引用的时候,会被回收。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值