<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<script>
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();
</script>
</body>
</html>这是一个js的闭包问题,但是我看不懂最后两部为什么输出f1函数的时候为什么要声明变量result,而且最后result后面还有括号,他们之间是什么逻辑关系呢?
1 回答
已采纳
千秋此意
TA贡献158条经验 获得超187个赞
f1()通过return暴露出一个公有的函数f2出去,在f2函数里引用了变量n,因为f2实际上是定义在f1内部的所以当f2的作用域里找不到变量n的时候会沿着作用域链往上找到f1作用域里的变量n,只要f2里对n的引用还在即使f1已经运行完毕但是里面的变量n也不会被销毁(垃圾回收);
// 至于为什么result要调用,代码这样写就比较直观: function f1() { var n=999; return function(){ console.log(n); } } var result = f1(); // 这一步f1()返回的实际上就是本来的f2那个函数,所以要在下面再调用f2才能执行里面的代码。 result(); // 直接写 f1()()也可以的
添加回答
举报
0/150
提交
取消