立即执行函数
在一个程序中,有些功能会被反复利用,所以做成函数反复调用,而有些则是只执行一次,但是他执行完还会占用空间,所以就会使用立即执行函数的写法。立即执行函数是指函数执行完立即销毁,一般针对初始化功能的函数。
有两种写法:
1.(function abc () {} () )
2.(function () {} ) ()
由于立即执行函数的特性,所以给他起名字没一点卵用!
w3c 建议使用第一种的写法
function () {} () 这种写法不对,只有表达式才能被执行符号执行,函数声明/函数表达式,只有函数表达式的形式才可!
所以说 var num = function () {} () 这种就可以!
因为只有表达式才能执行,所以
+function() {} () 也能被执行
– function() {} () 也能被执行
这里的 + - 是正负运算符,另外 !&& || ()都可以转化为表达式!
但是,还有一个恶心的问题
function (a,b,c,d) {}(1,2,3,4)按理来说是没有用的,有问题!但是浏览器一般会将(1,2,3,4)与前面的函数声明划分开来处理,没有任何意义,就是单纯的一串数字放在括号里面!不会报错!
我们来分析一下这个,返回arr赋予myArr,首先声明myArr与函数test,执行test函数,arr局部变量,for循环赋予10次arr函数,在这只是声明还没被调用!里面的打印操作没有被执行!
此时的i=9;i=10之后跳出循环,return 的arr是10个函数的数组,在下面的循环中才依次执行myArr函数,这时打印出来的i就是10,所以会打印10 个10!
在看这个,里面的函数变成了立即执行函数,所以将及时的i 赋予j,并且执行,但是这里的arr[j]函数也没有执行,立即执行的是赋予函数,在闭包抛出后,arr[]里面存的就是及时的i,也就是会打印出0 到 9