已经理解了这段闭包代码的意义了,但是在语法上面不完全理解这样子定义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>

解决方案 »

  1.   

    本帖最后由 net_lover 于 2013-06-14 19:18:19 编辑
      

  2.   

    这三个代码是相等的,能看明白么?var ff = function (){
    };
    ff()
    var ff = function (){
    };
    (ff)()
    [code=javascript]
    (function (){
    })()
      

  3.   

    这三个代码是相等的,能看明白么?var ff = function (){
    };
    ff()
    var ff = function (){
    };
    (ff)()
    (function (){
    })()
      

  4.   

    javascript 这种函数式编程与c java这种命令式编程最大的区别,就是函数是第一公民,函数可以没有名字,函数可以当成变量,函数内部可以再定义函数,由此引出不少有趣的写法。(function () {})();立即执行函数
    这种写法就是目前流行的框架和控件开发常见的手法,好处是立即执行函数内部形成一个闭包,在这里定义的变量名与其它地方的变量名天然隔离开,有效果防止命名冲突和隐藏内部变量和内部函数。