首页 > 代码库 > 20170713_js闭包/匿名函数/作用域
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闭包/匿名函数/作用域
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。