一道闭包题目的做题笔记
2017-10-30 16:46
85 查看
首先,需要知道foo与foo()的区别, foo指的是整个foo函数的js代码,foo()指的是return 的语句。
var f1=foo(); 就是将函数foo的执行结果赋给f1变量; foo的执行结果就是他的回调函数function;
即f1=function(){console.log(i++)};
f2=function(){console.log(i++)};
所以现在f1,f2两个变量都被存在了栈中,并且指向了堆中的function函数。f1和f2分别指向不同的地址空间。
第一次f1();执行function需要console.log(i++),但function函数局部并没有定义i,所以向上一级查询,就找到了foo中的var i=0;这时,内存给i变量划分单元,值为0,然后console.log(i++);打印值为0,内存单元中的i+1变为1。
第二次f1();f1指向的function函数的局部已经有了i,且值为1,打印出1。
第三次f2();f2的function函数产生的作用域并没有i变量,所以向上一级寻找,最终打印出0。
答案为0,1,0
var f1=foo(); 就是将函数foo的执行结果赋给f1变量; foo的执行结果就是他的回调函数function;
即f1=function(){console.log(i++)};
f2=function(){console.log(i++)};
所以现在f1,f2两个变量都被存在了栈中,并且指向了堆中的function函数。f1和f2分别指向不同的地址空间。
第一次f1();执行function需要console.log(i++),但function函数局部并没有定义i,所以向上一级查询,就找到了foo中的var i=0;这时,内存给i变量划分单元,值为0,然后console.log(i++);打印值为0,内存单元中的i+1变为1。
第二次f1();f1指向的function函数的局部已经有了i,且值为1,打印出1。
第三次f2();f2的function函数产生的作用域并没有i变量,所以向上一级寻找,最终打印出0。
答案为0,1,0
相关文章推荐
- 一道闭包题目的做题笔记
- 【预习笔记】一道很有趣的有关java类加载初始化的题目
- 学习笔记(7)--对“一道基本的汇编语言题目”的改进
- ES6 学习笔记之二 块作用域与闭包
- hud ---2021做题笔记(c++)
- hdu ---2027做题笔记(c++)
- C/C++一道题目的答案-函数指针与指针函数
- 一道笔试题目
- 一道有趣的题目,看看你的观点是分别开出拿些人?
- 完美的代价----蓝桥杯(一道有点启发的题目!)
- [POJ2104]K-th Number 做题笔记 主席树
- 零基础入门-javascript学习笔记之传说中的闭包
- [做题笔记] 2016/12/1
- 一道dfs题目
- 记录一道统计题目的解决方法
- Python语言学习笔记之闭包
- 黑马程序员——Swift学习笔记:闭包
- leetcode做题总结,题目First Missing Positive 2012/03/08
- swift 学习笔记之闭包
- 一道AC的题目的代码,超短,呵呵……