楼主一定对上面的代码是怎么执行的完全不明白。在弄清楚为什么去掉i后就没有效果,你必须得先知道这个i到底为什么不能去掉,这种写法又到底是怎么回事。
其实这是一种函数立即调用的写法。也就是定义一个匿名函数,然后立即就执行这个函数。这样的写法相当于:
function tmpName(index){再接近一点的写法如下:
var fn = function(index){你把上面的fn换成function(index){},是不是就是和你的那种写法一样了?只不过换后的函数省去了函数名。
很明显,index是形参,而i是在调用时传递的实参。如果不穿进去一个i,那就相当index参数没有了。这样的话,这个函数中用到的index的值就是null。试想,mDD[index]就变成了mDD[null],数组访问可以这样吗?这样不就出异常了吗?也是因此,不传进去i,会导致异常,会出错。