关于js闭包

<!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后面还有括号,他们之间是什么逻辑关系呢?

咩咩咩3124927
浏览 1159回答 1
1回答

千秋此意

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()()也可以的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript