立即执行函数
定义:此类函数没有声明,在一次执行过后即释放(被销毁),适合做初始化工作。
针对初始化功能的函数:只想让他执行一次的函数。
立即执行函数也有参数,也有返回值,有预编译。
例如:
(function () {
var a = 123;
var b = 234;
console.log(a + b);
}())
可以执行,357
例如:
(function (a, b, c) {
console.log(a + b + c * 2);
}(1, 2, 3))//这一行是实参
可以执行,9
立即执行函数的两种写法:
(function () {}()); //W3C建议使用这一种
(function () {})();
只有表达式才能被执行符号执行
能被执行符号执行的表达式,这个函数的名字会被自动忽略(放弃名字)。
能被执行符号执行的表达式基本上就是立即执行函数
函数声明和函数表达式是两个东西,虽然都能定义函数
函数声明:function test(){}函数表达式:var test = function(){ }
例如:
function () {
var a = 123;
}()
这是函数声明,不能执行,报语法错误,因为只有函数表达式才能被执行符号执行
例如:
function test () {
console.log('a')
}
这也是函数声明
例如:
function test () {
var a = 123
}
test();
这是函数表达式所以能执行
例如:
var test = function () {
console.log('a')
}()
这是表达式,可以被执行,此时在控制台执行test的结果是undefined,这个函数的名字会被抛弃
+ var test = function () {
console.log('a')
}()
加了个‘ 正 ’,在趋势上要把它转换成数字,就是表达式了,既然是表达式就能被执行,就会放弃名字,
console.log(test),就会报错,这就是立即执行函数,同样放了正号,负号 ,!就会放弃函数名字,转换成表达式,但是 * 和 / 不行,&& 和 || 前面放东西也行
例如:
(function test () {
console.log('a');
})()
这个被()包起来的function函数声明变成表达式了,就能被外面的()执行
例如:
(function test () {
console.log('a');
}())
最外面的大括号是数学运算符号,是最先被执行,其余的括号都是有语法意义的,
就把函数变表达式了,()也是数学执行符,能打印a,但是执行test就会报错,所以干脆不写test了