这里的函数为什么要这样写

这里的函数为什么要这样写

  (function(i){

               // 补充代码

               li[i].onclick=function(){alert(i)}

            })(i)

如上代码,为什么函数这里的要加括号跟i;


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>2-1</title>

    <style>

        /*补充代码*/

   li:hover{cursor:pointer;}

    </style>

</head>

<body>

    <!-- 补充代码 -->

    <li>1</li>

    <li>2</li>

    <li>3</li>

    <li>4</li>

    <script>

        var li=document.getElementsByTagName("li");

        for(var i=0,len=li.length;i<len;i++){

            (function(i){

               // 补充代码

               li[i].onclick=function(){alert(i)}

            })(i)

        } 

    </script> 

</body>

</html>

 


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
落日的猪猪 2019-01-22 21:26:50

(function(i){

               // 补充代码

               li[i].onclick=function(){alert(i)}

            })(i)

同学你好,首先我们来个分解:

第一:最外层是个匿名函数 ,在程序运行会预解析,跟普通函数不同,function后面不加名字会报错,为了让匿名函数正常通过,所以给匿名函数最外层添加了个括号。

第二:匿名函数没有名字,我们怎么调用呢?普通函数是 函数名()去调用,那么匿名函数我们直接function(){

}() 在后面直接加花括号就可以自调用。

上面的匿名函数设置了参数i,那么它后面调用的花括号传入的是实参i,其实跟普通函数一样传参,只不过没了名字而已

最后是不是function(i){

}(i)

为了避免解析错误在外层不仅可以加()还可以加符合语法的运算符,比如在!+ - 等符号在function前面:如!function(){

}

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师