JS无干扰事件的小问题,谢谢啦

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<input value="点击0" type="button"/>
<input value="点击1" type="button"/>
<input value="点击2" type="button"/>
<input value="点击3" type="button"/>
<input value="点击4" type="button"/>
<input value="点击5" type="button"/>
</body>
<script type="text/javascript">
    var s=document.getElementsByTagName('input'); //获取整个网页的标签
    window.onload=function(){
        for(var i=0;i< s.length;i++){
            s[i].onclick=(function(num){
                return function(){show(num)}
            })(i)
        }
    };
    function show(num){
        alert("你好,请"+num+"号嘉宾领奖")
    }
</script>
</html>

里面有一段代码看不懂

  for(var i=0;i< s.length;i++){
            s[i].onclick=(function(num){
                return function(){show(num)}
            })(i)
        }

看不明白, 那个(i)为什么放到最后面,i的值怎么传给num的?

闭包的知识,最经典的例子

表示还是看不懂啊, 那个(i)为什么放到最后面,i的值怎么传给num的?

作用是传值给闭包,很简单

然并卵...自学太苦恼了. 得不到答案呐....= - -

闭包的知识,有兴趣百度看看

s[i].onclick=(function(num){
return function(){show(num)}
})(i)

当一个函数定义完,我们想立即调用怎么办?
function a(s){
alert(s)
}

在后面加上小括号,为了防止报错,给函数加上运算符或者无实意的括号,比如:
+function a(s){
alert(s)
}(3)

(function a(s){
alert(s)
})(3)

(function a(s){
alert(s)
}(3))

传值给闭包,也学习了一下