认识立即执行函数:
为什么要叫立即执行函数?该函数执行完 会将函数立即释放。
(function abc(){
var a=111;
var b=222;
console.log(a+b);
}())
</script>
</body>
</html>
当然这段代码的运行结果为:333,这段代码运行结束后再次调用这个函数,系统提示不存在该函数。
它的基本形式:
(function(a,b,c)){ //括号内为形参 有没有名字没有影响
return ; //还可以写返回值
}(1,2,3)) //括号内为实参
//(function (){}()); 推荐
//(function (){})();
为什么要这样写?
我们先来说说什么形式函数才可以被执行。当函数被理解成表达式时就会执行
(function (){}());
(function (){})();
//当函数被理解成表达式时就会执行
//function(){} 不是表达式,是函数声明。所有不可以function(){}()这样执行
//(text() ,123 ,() 是表达式)
//能被执行符号执行的表达式 这个函数的名字会被自动忽视
来看这一种形式 输出函数 ,你觉得编译器会通过吗?
答案是:会通过 (计算机将 其看为表达式,函数执行)
+ function(){ //当然 正号(+) 负号(-) 非(!) (~)都可以通过语法检查
console.log("hello world"); //控制台输出:hello world
}();
来看这么一个有趣的例子:
function text(a,b,c,d){
console.log(a+b+c+d);
}(1,2,3,4);
在上面我们分析过了,这样写 不可以执行 text 函数,可这样写报错吗?
答案是:不会报错,打开控制台,没有显示任何东西
计算机会这样解释这段代码:将后面 (1,2,3,4)看做逗号运算符,此时我们在控制台输入text显示(如下)。
立即执行函数的作用:
立即执行函数本质上是:
创建一个独立的作用域。
这个作用域里面的变量,外面访问不到(即避免「变量污染」)。
1)针对初始化功能的函数
2)解决闭包 (详细看闭包方面的知识)