立即执行函数(IIFE)
for(var i=0 ;i<10 ; i++){
(function fn(){
console.log(i);
})(i)
}
立即执行函数函数名与体是一个整体,定义之后立即执行,只会调用一次
此处函数名也可以没有,为匿名函数
function fn(){ } //函数声明
以上是声明部分,在后面直接加()是不能执行的,需要先转换成表达式,常用方法是用()将声明括起来。
(function fn(){ })()
相当于:
var f = function fn(){ } //函数表达式
fn();即把函数当作解析式解析,然后执行解析后的函数
也可以写成
( function fn(){ }() ) //函数表达式
是把函数表达式和执行当作语句直接执行,
相当于 var a = function(){}(); a得到的是结果立即执行函数的作用
IIFE建立一个新的函数执行域,将要执行的代码封装在其中,所以不会污染全局作用域。
如果该函数需要一个全局变量,则可以pass 给 IIFE(function iF(global){
//以函数形式调用时,this是 window对象,此处变量为全局变量
}(this)函数表达式与函数声明
Js引擎在解析js代码时会“函数声明提升”当前的作用域上的函数声明,通俗点讲就是首先加载所有的函数声明,所以可以 将函数的调用写在声明之前。
函数表达式后加括号可以立即执行。
函数声明不可以,只能以fnName() 形式调用。