立即执行函数,逗号表达式,闭包深入
IIFE
IIFE(立即执行函数表达式) :英文Immediately-invoked function expression;
IIFE常见两种形式:
//1. W3C建议 World Wild Web Consortium
(function(){
console.log(1)
}());
(function(实参){
console.log(1)
}(形参));
//2.常见形式
(function(){
console.log(2)
})();
还有一种可以使用的方式
var num = function(){
return 1;
}();//能执行吗? √
console.log(num); //1
为什么引入IIFE呢?
IIFE的特点:
- 自动执行
- 执行完后立即释放
- 可以返回函数结果(可以有返回值被保存)
当我们使用一个函数,我们 只想要一次执行结果,以后再不使用 (主要原因);
若是全局中的函数,只要被声明就在GO中,一直存在,即使函数被执行结束,也仍然存在,浪费内存或加载过慢。
表达式
()括号包裹的任何东西(变量、函数、对象 …)都叫表达式。
问题来了:
//情况1
function test(){
}();//能执行吗? ×,语法错误
//情况2
var num = function(){
return 1;
}();//能执行吗? √
console.log(num); //1
//情况3
var num2 = function(){
console