立即执行函数
即函数在定义后立即被执行
-
定义:此函数没有声明,再一次执行过后即释放(被销毁),适合做初始化工作。
立即执行函数也有参数,返回值和预编译
//语法格式:
//第一种
(function () {
console.log("立即执行函数")
})();
//第二种 ,w3c建议使用这一种
(function () {
console.log("javascript")
}());
//例
(function (a,b,c) {
console.log(a + b + c * 2);
}(1,2,3)); //这一行中1,2,3是实参
var num = (function (a,b,c) {
var d = a + b + c * 2 - 2;
return d;
}(1,2,3));
//num = 7
只有表达式才能被执行符号执行
能被执行符号执行的表达式,这个函数的名字就会被自动忽略(放弃名字)
能被执行符号执行的表达式基本上是立即执行函数
函数声明和函数表达式时俩个东西,虽然都能定义函数
函数声明:function test() {} 函数表达式:var test = function() {}
例: function () {
var a = 123;
}()
这是函数声明,不能执行,报语法错误,因为只有表达式才能被执行符号执行
例: function test() {
var a = 123;
}
test();
test();是表达式,所以能执行。
例: var test = function () {
console.log(“a”)
}()
这是表达式,可以被执行,此时在控制台执行test的结果是undefined,这个函数的名字会被放弃
例: + function test() {
console.log(“123”);
}()
加了一个”正“,在趋势上要将它转换为数字,就是表达式了,即是表达式就能被执行,就会被放弃名字,所以在控制台上执行test就会报错,这就是立即执行函数。
同样放了 ” + “ ,” - “ ,” !“ 就会放弃函数名字,就会转换为表达式;但是 ” * “ 和 ” / “ 不行,& 和 || 前面放东西也行
例: var test = function () {}
其中 =function () {} ,把function赋到test里面去叫表达式,var test 是声明
在执行时,会放弃这个函数,储存到 test 里面储存引用,让这个 test 恢复到被声明的状态
例: ( function test() {
console.log(“123”);
})()
这个被()抱起来的function函数声明变表达式了,就能被外面的最后的() 所执行了
外面的最大的括号是数学运算符,是最先被执行的,其他括号都是有语法意义的,就把函数变表达式了
()也是数学运算符,就能打印 123 ,但是执行 test 就报错,所以就可以直接不写test
注意: function test(a , b , c) {
console.log(a + b + c);
}(1 , 2 , 3)
这样子写理论上不会执行,只写 () 就会被当成执行符,但是写成 (1,2,3) 之后暂时不会被当成运算符,没意义
不会执行,也不会报错,还能调用 test 。
立即执行函数的作用
- 初始化页面和数据。
- 创建一个独立的作用域,这个作用域里面的变量外面访问不到(即避免了变量污染)。