Javascript(笔记08) - 函数 - 立即执行函数
原创
©著作权归作者所有:来自51CTO博客作者ahuiok的原创作品,请联系作者获取转载授权,否则将追究法律责任
【笔记08】Javascript - 立即执行函数
函数分两种定义方式
function demo (){} // 函数声明
var demo = function (){} // 函数表达式
还有一种定义的方式,甚至没有给函数取名字,定义完之后,不用去调用它,他就能执行。
(function (){
console.log("123"); // 123
}())
这种函数就叫: 立即执行函数。
立即执行函数
立即执行函数的特点是,定义完,读到这,立即执行,执行完后,立即销毁函数本身。
一般的全局函数长这样:
function test(){
console.log("abc");
}
test();
这样定义的全局函数,调用执行完后,不会消失,等待被执行,占用内存。
如果函数只想执行一次,又不想浪费空间,怎么办? 立即执行函数。
立即执行函数,执行完后,销毁了,找不到了,就算取了名字,也找不到了。
(function demo(){
console.log("abc");
}())
在控制台引用时报错:

既然取了名字也找不到,就不用取名字,很任性。
立即执行函数除了不能反复被调用外,跟基本函数没有区别;
语法:
(function (){}()); //常用方法
(function (){})(); //不常用
传参数:
(function (a, b){
console.log(a + b); //3
}(1, 2))
返回值:常用于初始化数据
var num = (function (a, b){
return a + b;
}(1, 2))
原理:只有表达式才能被执行
// 函数声明
function test (){ // ... }
// 只有变成表达式后才能执行
test(); // 表达式 ()代表执行符
// 函数表达式
var demo = function(){ // ... }
示例1:给函数声明后加个执行符"()",能执行函数么?
function test(){
console.log("a");
}();
这样不行,会报错:

示例2:给函数声明加上转换符(或叫运算符) "+" / "-" / "!",函数能被执行么?
+ function test(){
console.log("a");
}(); // a 函数能执行了
加上转换符后,函数声明整体变成表达式了,这样函数就能执行了,加上 “-” 和 "!" 也是可以的。
示例3:给函数声明加上"()",这也是运算符,那函数能被执行么?
(function test(){
console.log("a");
})(); // a 也能执行,跟上面不推荐使用的写法一样了
运算符“()”括号也能把函数声明变成表达式,表达式才能执行。所以,这样看,立即执行函数是变化推导而来,不是定义出来的。那为什么常用写法里把执行"()"放在函数声明里面也可以执行?因为外面的运算符“()”的优先级更高,函数声明变成表达式了。