不知道什么叫“立即执行函数“?

843 阅读2分钟

一: 什么是立即执行函数?

在了解立即执行函数之前先明确一下函数声明、函数表达式及匿名函数的形式。

//函数声明
function add() {
  console.log("函数声明")
}
// 函数表达式
var sum = function() {
	console.log("函数表达式")
}
// 匿名行数
function(){
	console.log("匿名函数")
}

声明一个函数,并马上调用这个匿名函数就叫做立即执行函数;也可以说立即执行函数是一种语法,让你的函数在定义以后立即执行;

二:立即执行函数的表现形式

(function(e){
	  console.log(e);
})("我是立即执行函数")
var fun =function(e) {
	  console.log(e);
}("立即执行函数")

三:使用场景

var obj={
	 name:"Java",
	 age:18,
	 fn:function(){
		 return "Program:"+this.name+"age:"+this.age;
	}
};
console.log(obj.fn());
var fn=function(){
		return "赋给变量的匿名函数!";
}
		
//调用方式与调用普通函数一样
console.log(fn());

(function());(function(){});是(document).ready(function(){});的简写,相当于window.onload = function(){} ,虽然这段jquery代码与javascript代码在功能上可以互换,但执行的时间不一样,前者页面框架加载完成就执行,后者页面中所有内容加载完成才执行。

闭包

(function(){})()不叫闭包叫立即执行函数,所谓闭包,要拆成闭和包,闭指代不想暴露给外部的数据,包指代将数据打包出去暴露给外部;之所以这么说原因在于JS的函数作用域,函数内部的变量函数外部无法访问,这形成了闭;函数外部想得到函数内部的变量,可以通过某些方法譬如通过return等语句将内部的变量暴露出去,这形成了包;因而——立即执行函数只是函数的一种调用方式,和闭包没有必然的联系;闭包是和作用域扯上关系的,而(function(){})()是函数声明完就执行,只是有时想要用到闭包那么可以用(function(){})()来构成闭包,而不是(function(){})()是闭包。闭包的本质是执行完后只返回有用的数据,包内变量完全销毁,防止全局污染。

闭包本身定义比较抽象,MDN官方上解释是:A closure is the combination of a function and the lexical environment within which that function was declared. 中文解释是:闭包是一个函数和该函数被定义时的词法环境的组合。