IIFE:immediately-invoked function expression
通常函数的闭包时这样写的
(function(s) {/*函数体*/})();
这段代码会被立即执行,就是所谓的IIFE,立即执行函数体为什么要被一个括号包起来呢,因为JS代码在执行的时候,对于普通的函数会进行两次检查pre-parse和full-parse,pre-parse只检查简单的语法,用时少,full-parse在运行前进行,用时多,因为提交的代码中不一定所有的方法都会被执行,所以先全部执行一次pre-parse再针对即将被执行的代码full-parse可以提高效率。
但是对于IIFE来说,pre-parse是没有必要的,JS引擎对此作了专门的优化,就是在检查到函数前有"("或者"!"的时候,直接进项full-parse。
//先进行pre-parse
varfoo= function() {
//code...
};
//再进行full-parse
foo();
//只执行一次full-parse
(function() {
//code...
})();
//只执行一次full-parse
!function() {
//code...
}();
以前看到书里的代码都是这么写的,人云亦云也就跟着写了这么久,从来不知道什么意思。
本质上来讲,这种写法是编码者针对JS引擎识别立即执行函数的方法而作出的优化,一个小小的改动对性能优很大的提升。
优化程度可以通过重复执行两个函数计算平均时间来看,实验以后再做......