闭包 变量提升理解
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引用的时候,会被回收。
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引用的时候,会被回收。
相关文章推荐
- javascript变量提升和闭包理解
- 理解Javascript_15_作用域分配与变量访问规则,再送个闭包
- 深入理解Javascript作用域与变量提升
- js变量提升深入理解
- js的变量和闭包的理解
- 深入理解JavaScript作用域、变量对象、闭包
- 理解Javascript_15_作用域分配与变量访问规则,再送个闭包
- 深入理解js的变量提升和函数提升
- JavaScript中作用域和作用域链的简单理解(变量提升)
- 深入理解变量声明提升和函数声明提升
- javascript理解之变量作用域与闭包
- JavaSript中变量的作用域 闭包的理解
- 谈谈自己对js闭包,执行上下文,作用域链,活动对象AO,变量对象VO的理解
- 深入理解Javascript的var变量和闭包
- 深入理解变量声明提升和函数声明提升
- 深入理解Javascript作用域与变量提升
- 对于JS语言的深刻理解(变量定义;作用域链;闭包;this)
- 深入理解变量声明提升和函数声明提升
- Js闭包中变量理解
- 一个典型的例子理解JavaScript作用域以及变量提升