首页 新闻 会员 周边 捐助

JS,Nodejs大神进,闭包简单问题,进来轻松拿分!!!

0
悬赏园豆:5 [已解决问题] 解决于 2017-10-27 22:06

从C++/Java转过来学JS有点不习惯,JS闭包这个表达式()()连续两个括号?为什么把还可以把function括起来然后又加一个()啊。

 

 

  

比如这个,把这个迭代器function括起来,加参数(i),外面的括号(0)就表示调用0了,把0传进去i。

还有这个,

var a = 6;

(function() {
var a = 5;
})();

a = 6//true。

这个闭包创造新的作用域,闭包一定是()()这种表达式吗?为什么是这个规范。

抱歉,初学JS,很不习惯。

Lawliet__zmz的主页 Lawliet__zmz | 初学一级 | 园豆:4
提问于:2017-10-26 23:43
< >
分享
最佳答案
0

在函数后面加个圆括弧就是调用函数嘛,声明函数的时候就在后面加圆括弧就是立即调用函数表达式嘛,每一个函数都可以生成一个新的作用域!当一个函数已经执行完毕之后还保留着一些变量的访问那才是闭包!

收获园豆:3
by.Genesis | 老鸟四级 |园豆:2824 | 2017-10-27 09:42
其他回答(1)
0

看楼主的问题应该是javascript函数作用域、闭包以及匿名函数的概念不是很清楚。建议重点看一下javascript函数章节。

接下来简单说一下:1.function iterator(i){}函数名:iterator ;*注意()前面如果没有iterator就变为匿名函数,调用方法:iterator(参数)

2.(do someting...)()匿名函数必须立即调用否则没有意义;具名函数可以通过名字调用如上;匿名函数总不能在某个地方用()表示调用了吧,哈哈,浏览器不知道你在干啥。

3.当在2中的dong someting 为一个函数时就构成了一个闭包,两个或以上函数嵌套函数就组成了闭包,此例子中的外层函数为匿名函数比较特殊,除此之外函数有自己的作用域,以 function iterator(){作用域在这里}为例,花括号内为此函数的作用域,(匿名作用域在这里)(匿名立即调用);

4.

var a = 6;//匿名函数的外部作用域

(function() {//内部函数,也是匿名函数;连个函数嵌套形成闭包,此为匿名函数的作用域,更具体就叫做内部作用域

var a = 5;

console.log(a)//a为5,a的取值方法为一层一层向外找,如果没有"var a=5"此时a=6
})();

5.function a(){

function b(){//闭包形成

}

}

收获园豆:2
前端工程家 | 园豆:204 (菜鸟二级) | 2017-10-27 14:25

抱歉,采纳最佳答案点错了,本来是采纳您的答案的,分也给反了=-=

支持(0) 反对(0) Lawliet__zmz | 园豆:4 (初学一级) | 2017-10-27 22:07

@Lawliet__zmz: 没关系,我也只是刚进博客园,也有很多不懂的问题,多多交流。

支持(0) 反对(0) 前端工程家 | 园豆:204 (菜鸟二级) | 2017-10-29 08:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册