如题:<script type="text/javascript">
for(var i=0;i<sum;i++){
oSubLi[i].onmouseover = (function(i){
return function(){
}
})(i)
}
</script>
for(var i=0;i<sum;i++){
oSubLi[i].onmouseover = (function(i){
return function(){
}
})(i)
}
</script>
那这个i有什么作用,好像没这个写法吧
(function(i){ //形参
})(i) // 实参
我们在一些JS代码中经常可以看到这样的用法 :
(function(){})();
那这些括号是做什么用的呢?
下面我们来测试一下就知道了(function(){alert('zol');});
运行后,没有反映(function(){alert('zol');})();
运行后,弹出 zol(function(){alert('zol');})(alert('wiki'));
运行后,先弹出wiki,再弹出zol(function(){alert('zol');})(alert('wiki'););
出错,什么也不运行。我们从第二个可以看出,第一个括号中的匿名函数执行了,说明第二个括号是用于执行操作,这和我们调用函数的用法一样,比如定义了一个function a(){};我们调用a这个函数是 a();那么a就和这个例子中的第一个括号代表的意思相同,是一个函数体,只是没有名字,我们也叫他匿名函数。
第三个代码中先弹wiki,说明alert('wiki')是先执行,这个是做为第一个括号的函数的参数来运行了,如果给参数后加分号,当然就出错了,所以第四个代码就不运行了。结合zsx841021,calmcrime 上面的资料问题明确了
但是:
var fn=(function(){
//块级作用域
alert('aa');
return 'bb';
})(alert('cc'));
alert(fn);
发现第一对()好像有没有和
var fn=function(){
//块级作用域
alert('aa');
return 'bb';
}(alert('cc'));
alert(fn);
结果都一样
http://www.cn-cuckoo.com/main/wp-content/uploads/2009/12/named-function-expressions-demystified.html