从C++/Java转过来学JS有点不习惯,JS闭包这个表达式()()连续两个括号?为什么把还可以把function括起来然后又加一个()啊。
比如这个,把这个迭代器function括起来,加参数(i),外面的括号(0)就表示调用0了,把0传进去i。
还有这个,
var a = 6;
(function() {
var a = 5;
})();
a = 6//true。
这个闭包创造新的作用域,闭包一定是()()这种表达式吗?为什么是这个规范。
抱歉,初学JS,很不习惯。
在函数后面加个圆括弧就是调用函数嘛,声明函数的时候就在后面加圆括弧就是立即调用函数表达式嘛,每一个函数都可以生成一个新的作用域!当一个函数已经执行完毕之后还保留着一些变量的访问那才是闭包!
看楼主的问题应该是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(){//闭包形成
}
}
抱歉,采纳最佳答案点错了,本来是采纳您的答案的,分也给反了=-=
@Lawliet__zmz: 没关系,我也只是刚进博客园,也有很多不懂的问题,多多交流。