首页 新闻 会员 周边

javascript,关于闭包的一些疑问

0
悬赏园豆:5 [已解决问题] 解决于 2017-02-23 10:25

javascript,关于闭包的一些疑问,下图的两张图是闭包的函数




Model-Zachary的主页 Model-Zachary | 菜鸟二级 | 园豆:212
提问于:2017-02-22 18:51
< >
分享
最佳答案
0

问题一:定义了两个键值对,可以理解成给aaa函数定义了两个属性,属性名分别为b、c,属性值分别为bbb、ccc。

问题二:函数分两种:一种是功能性函数,另外一种是带有返回值的函数。你可以区分一下这两种函数就懂了、

问题三:没必要非得赋值,直接aa()()也可以。

 

收获园豆:5
芳格 | 菜鸟二级 |园豆:215 | 2017-02-22 21:45

大神,我最后废话一下,var c = aa(); c();跟直接aa()()执行效果一样,是为什么,还有功能性函数我大致明白一般是function test(){ }这样的,那那个有返回值的是不是指闭包,函数嵌套函数的函数,是吗大神


Model-Zachary | 园豆:212 (菜鸟二级) | 2017-02-22 22:00

aa()只是对外层函数的调用 而调用aa返回了bb函数没错,但是bb函数并未被调用。所以想要弹出必须调用bb,那自然就需要再加()实现了。

芳格 | 园豆:215 (菜鸟二级) | 2017-02-22 22:10

@model-zachary: var c = aa()这一句执行过后,c与aa()等价,就是说c与aa()一模一样,那c()跟aa()()自然也等价了。

功能性函数是指执行了一些计算、弹出、打印等功能的函数,有返回值的函数不一定是闭包,但是闭包一定由返回值的哦,

芳格 | 园豆:215 (菜鸟二级) | 2017-02-22 22:26

@芳格: en,哪还有一点就是他为什么不能像正常函数那样调用,而是要这样先赋值或者aa()()这样的调用呢?正常的函数不是function aa(){ alert("test") } aa();就可以了 他为什么会多一道程序


Model-Zachary | 园豆:212 (菜鸟二级) | 2017-02-22 22:41

是不是那个就是自动执行函数,起到的就是那个作用?对吗、像这样(function(){ })()


Model-Zachary | 园豆:212 (菜鸟二级) | 2017-02-22 22:43

@model-zachary: 这是匿名函数的自调用

芳格 | 园豆:215 (菜鸟二级) | 2017-02-22 22:44

@model-zachary: 你所谓的平常的函数没有嵌套另一个函数,而这里属于两个函数,两个函数自然要有两次调用。

芳格 | 园豆:215 (菜鸟二级) | 2017-02-22 22:46

@芳格: 两个函数自然要有两次调用,一语道破,通俗易懂,谢谢


Model-Zachary | 园豆:212 (菜鸟二级) | 2017-02-23 10:25
其他回答(2)
0

少年,去买本书《javascript高级程序设计》看看吧,这些问题是基础的不能再基础的问题了。

wangujianchi | 园豆:221 (菜鸟二级) | 2017-02-22 18:58

我有红皮书,但没怎么看,这是哪里有讲到的


支持(0) 反对(0) Model-Zachary | 园豆:212 (菜鸟二级) | 2017-02-22 19:20
0

 额,感觉好凌乱,我觉得是作用域理解的问题吧

半路独行 | 园豆:574 (小虾三级) | 2017-02-22 19:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册