日期:2014-05-16  浏览次数:20293 次

(function () {})(); 这种方式定义function,看得不明白,求教了!

已经理解了这段闭包代码的意义了,但是在语法上面不完全理解这样子定义function的方式。主要是我标红色和蓝色的那两对括号。求教了,谢谢!

<html><head></head><body>
<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul>
</body>
<script>
var liArr = document.getElementsByTagName("li");
var liArrLength = liArr.length;
for (var i = 0; i < liArrLength; i++) {
(function () {
var local_i = i;
liArr[i].onclick = function () {
alert(local_i);
}
})();
}
</script>
</html>

------解决方案--------------------
本帖最后由 net_lover 于 2013-06-14 19:18:19 编辑
先执行括号的代码,这里的意思是定义一个匿名函数并执行

你执行下面的代码就明白了
<script>
(function(){ alert("ok1")})();

(function(param){ alert(param.location)})(window);
</script>


------解决方案--------------------
fns();
------解决方案--------------------
javascript 这种函数式编程与c java这种命令式编程最大的区别,就是函数是第一公民,函数可以没有名字,函数可以当成变量,函数内部可以再定义函数,由此引出不少有趣的写法。

(function () {})();立即执行函数
这种写法就是目前流行的框架和控件开发常见的手法,好处是立即执行函数内部形成一个闭包,在这里定义的变量名与其它地方的变量名天然隔离开,有效果防止命名冲突和隐藏内部变量和内部函数。