目录
推导 :
引言:
学过js的朋友们应该都知道立即执行函数,当只需要函数执行一次就行了,以后都不会执行,为了避免函数占用空间,就用立即执行函数,让他执行完一次后就自动销毁吧。
为什么立即执行函数是这种格式的写法?
下面是俩种写法,是不是都知道这么写,但是不知道为什么可以这么写,背就完事了?那还只停留在表面,不懂原理是没法做恶心的笔试题的,其实不一定只有俩种写法的,下面一步步的推导 ,看完你一定能明白,wc 原来如此啊
(function() {
console.log("写法一");
})();
(function() {
console.log("写法二");
}())
推导
一:
首先要知道俩句话: 只有函数表达式才能被执行符号执行。被执行符号执行完,函数名字就被放弃了,没名了。
执行符号就是(),不太懂,没事,看例子就懂
function test() {
console.log("执行");
}() // 是函数声明,执行不了,报错
*****************************************
function test() {
console.log("执行");
}
test() // test是表达式,可以被执行符号执行
*****************************************
var test = function() {
console.log("执行");
}(); //函数表达式,也是表达式,可以被执行符号执行
console.log(test); //undefined
*****************************************
二:
既然表达式才可以被立即执行符号执行 那对第一个例子更改下,让他变为表达式。就可以正常运行了
在前面添加正号 +,-, !等都可以转变为表达式 骚不骚,说不定就是笔试题哦
+ function test() {
console.log("执行");//执行
}();
console.log(test); //ReferenceError: test is not defined 名字没了
三 :
既然你+可以转,那我() 算不算运算符,那也是同样道理可以的呀 那就把+换成。
既然一被执行符号执行名字都没了,那干脆名字我也不写了,写了也白写,那简化不就得到最后我们常用的形式了吗?
(function() {
console.log("写法一");
})();
(function() {
console.log("写法二");
}())
最后:
看完了 还觉了立即执行函数就俩种写法吗? 你要是想sao 什么加+,-,!,|| 都是可以的啊,主要是,以后碰到这种恶心的题目,别被唬到了
+ function test() {
console.log("执行");//执行
}();
console.log(test); //ReferenceError: test is not defined 名字没了