闭包直接调用外层函数和把函数赋值给变量再调用有啥区别?

发布于 2022-09-07 04:23:31 字数 205 浏览 18 评论 0

function fn1(){
  var a = 6;
  function fn2(){
    alert(a) ;
  }
  return fn2;
}
// var f = fn1();
// f()  alert 6
fn1() //没有效果

如上代码,赋值给变量f能alert 6,但是直接调用fn1就没有反应。请问这是什么原理

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

木有鱼丸 2022-09-14 04:23:31

因为你fn1()只执行了1次。
而你的f 在赋值的时候执行了一次函数,然后f本身又执行了一次函数,相当于执行了2次。

拍不死你 2022-09-14 04:23:31

因为return 是一个函数
所以 fn1() 得到一个函数
fn1()() 调用该函数

青朷 2022-09-14 04:23:31

你仔细看看 fn1,直接 fn1是有结果的啊,结果就是返回了内部函数fn2:

var f = fn1(); // f 实际上等于 fn2
f() //  fn2()结果是 alert 6
// 这样结果就是 alert 6 了
fn1()()
酒与心事 2022-09-14 04:23:31

你只是调用函数fn1 返回的是一个函数引用
在加一个()才是执行fn1()()

蓝海 2022-09-14 04:23:31

fn1()()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文