闭包直接调用外层函数和把函数赋值给变量再调用有啥区别?
function fn1(){
var a = 6;
function fn2(){
alert(a) ;
}
return fn2;
}
// var f = fn1();
// f() alert 6
fn1() //没有效果
如上代码,赋值给变量f能alert 6,但是直接调用fn1就没有反应。请问这是什么原理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
因为你fn1()只执行了1次。
而你的f 在赋值的时候执行了一次函数,然后f本身又执行了一次函数,相当于执行了2次。
因为return 是一个函数
所以 fn1() 得到一个函数
fn1()() 调用该函数
你仔细看看 fn1,直接 fn1是有结果的啊,结果就是返回了内部函数fn2:
你只是调用函数fn1 返回的是一个函数引用
在加一个()才是执行fn1()()
fn1()()