什么是 IIFE
(function(){
// _...do something...
})();
如上所示,在函数声明的外面加上一对圆括号,并在结尾处再加上一对括号,此函数在声明完成之后,会立刻执行。这种用法就叫做:立即执行函数。
通过使用圆括号包裹我们的函数, 我们告诉解释器以函数表达式的方式解析JavaScript代码 , 而不是函数声明。
该表达式返回一个函数对象:
var f = (function() {
console.log("hello world!")
})
console.log(typeof f) // function
console.log(f instanceof Object) // true
事实上,任何操作一个函数并返回此函数的表达式,均可以生成 立即执行函数 ,以下写法均合法:
-function() {
console.log("hello world!")
}()
*function() {
console.log("hello world!")
}()
/function() {
console.log("hello world!")
}()
&function() {
console.log("hello world!")
}()
,function() {
console.log("hello world!")
}()
立即函数有什么作用
我们知道了立即函数的实际行为:创建了一个函数表达式,并立即执行。那么为什么我们需要使用 IIFE ?
私有性
在 JavaScript 中,变量所在的作用域在包含它们的函数中,这意味着不能从函数体的外部访问到这些变量:
(function() {
var secret = 64
})()
console.log(secret) // ReferenceError: secret is not defined
这允许我们在函数私有的变量和数据不被侵扰的情况下使用这些变量和数据。
虽然使用命名函数也可以达到同样的效果,但是 IIFE 不会污染全局命名空间。
网友评论