您的位置:首页 > 其它

闭包 变量提升理解

2017-03-08 16:12 357 查看
变量提升

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引用的时候,会被回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: