js----函数之立即执行函数
立即执行函数会被立即执行
总结:
- 针对初始化功能的函数,这类函数只会执行一次
- 只有表达式才能被执行符号执行
- 执行后被清除,其作用域[[scope]]也被清除,释放空间
- 可以传参,可以有返回值
写法:
(function (){}()) //w3c建议
//或者
(function (){})()
//带参数
var num = (function (a,b){
console.log(a+b)
}(123,123))
//有返回值
var num = (function (a,b){
return a+b
}(123,123))
扩展:
- 使用隐形转换将函数声明变为表达式 如 - 、 + 、!等
+function(){
console.log("a")
}()
-function(){
console.log("a")
}()
!function(){
console.log("a")
}()
- 复杂表达式被执行后会失去原来对函数的索引
var demo = function(){
console.log('a')
}();
console.log(demo)
结果:
//a
//undefined
/*
执行后function(){}被销毁,demo失去了地址索引,恢复预编译时的undefined
*/
错误立即函数的一些写法及原因
//-------------错误1:
function test(){
console.log("1,2,")
}()
//结果:报错,函数声明不是表达式
//-------------错误2:
function test(a,b){
console.log("1,2,")
}(a,b)
/*
结果:不报错,不执行 ;引擎自动变为以下格式
function test(a,b){
console.log("1,2,")
}
(a,b)
*/
//-------------正确:
(function test(a,b){
console.log("1,2,")
}(a,b))
//结果:不报错,执行 ,