20170713_js闭包/匿名函数/作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20170713_js闭包/匿名函数/作用域相关的知识,希望对你有一定的参考价值。

js:闭包
var getNum;
function getCounter() {
var n = 1;
var inner = function () {return n++; }
console.log(n);
return inner;
}
//第一步
getNum = getCounter();

//第二步
console.log(getNum());//1

//第三步
console.log(getNum());//2

//也许是这样?可能的情况1:
//第一步 getNum指向了getCounter函数的返回值,即inner函数,此时inner内的n调用的是上级函数的n,但是没有执行,所以此时n是1,而且由于他调用的是上级函数的变量,此时inner的n突破了作用域,n=1写入到了内存中,可以以后进行调用
//第二步 执行getNum函数,也就是执行了inner函数,inner函数此时返回n++,也就是 1++ 返回了1,执行后n现在等于2了
//第三部 同上返回2,执行后n等于3

//或者是这样?可能的情况2:
//第一步 getNum指向了getCounter函数的返回值,即inner函数
//第二步 执行了getNum函数,也就是执行了inner函数,由于他在一个高阶函数getCounter内部,他可以使用高阶函数内的变量n,由于inner函数被return,此时n实现了越狱,n=1写入到了内存中,可以以后进行调用,此时输出1,n++后n=2
//第三步 由于n实现了越狱,输出2,n++后n=3

//n不是全局变量,只能在inner内使用
 
参考文档:
①图解JS闭包 https://zhuanlan.zhihu.com/p/27857268
javascript之作用域与闭包详解http://www.cnblogs.com/syfwhu/p/4839562.html





以上是关于20170713_js闭包/匿名函数/作用域的主要内容,如果未能解决你的问题,请参考以下文章

js函数作用域预编译和作用域链闭包立即执行函数

15_匿名函数和闭包的使用

js中的匿名函数和闭包总结篇

js中的匿名函数和闭包总结篇

09 匿名函数函数作用域闭包递归

网站前端_JavaScript-基础入门.0016.JavaScript匿名闭包