JavaScript初学 学习笔记5:JavaScript之立即执行函数

前言

如果我在全局的范围内定义了一个函数

<script>
function a(){

}
function b(){
	
}
</script>

这两个函数除非等到执行之前,是不是一直处于等待被执行的情况,而一直等待被执行 是不是占用空间,除非等到JavaScript被执行完,才能把空间给释放掉

更特殊的时候,有的函数(例如针对初始化功能的函数)从出生倒塌执行完,他就被执行了一次,这种函数我们一般不想像上述那种定义方式来实现,我们给出了一种叫做 立即执行函数


立即执行函数(Imdiately Invoked Function Expression IIFE)

一个在定义的时候就立即执行的JavaScript函数
如下就是立即执行函数两种写法

(function (){
			
}())//W3C 推荐这种写法

(function (){
	
})();

我们用第一种写法进行解释

函数执行完就被销毁

为什么立即执行函数不用函数名

首先来看下下面这一段代码

(function abc() {
	var a = 123;
	var b = 234;
	console.log(a + b);
}())

在这里插入图片描述
因为立即执行函数执行完就被销毁,所以,根本不需要添加函数名

立即执行函数除了执行完就被释放,除此之外,函数该有的东西,立即执行函数都有

立即执行函数的形参、实参以及返回值

(function (a,b,c) {
	//第一个括号可以写形参
}(1,2,3))
//第二个括号里面可以传递实参

var num = (function () {
	return 4;
}())
//通过外界变量传递返回值

深入浅出

如下函数申明

function test(){
	console.log('a');
}

在这里插入图片描述
然后大家来看啊,你看,我们这个函数申明和函数执行是不是一模一样,那如果在函数申明后面加一对括号,是不是也能执行呢?

function test(){
	console.log('a');
}() //结果是报错的,语法解析错误

function test(){
	console.log('a');
}
test(); //这样才可以

为什么?别急,先记住一句话

只有表达式才能被执行符号执行

因为上述的第一种情况,在function后面加括号,那个不叫函数表达式,那个叫做函数申明

欸,那我们也知道有一种叫做函数表达式,那么可以被括号执行吗?

var test = function () {
	console.log('a');
}();//控制台上输出了 a

+ function test(){
	console.log('a');
}();//这样也是可以的 因为它是一个表达式了

(function test() {
	console.log('a');
})();//这样也是可以的,因为加了括号也就变成了表达式了

结果告诉我们是可以的

再来一个知识点

能被执行符号执行的函数表达式,这个函数名字就会被自动忽略

上述同样的代码运行之后,在控制台上输入test
得到的结果如下
在这里插入图片描述
所以是不是,这个表达式定义出来之后,马上被执行,并且被释放了,所以可以说,能被执行符号执行的表达式,基本上就成了立即执行函数

(function (){}())

我们上面讲了,只有表达式才能被执行符号执行,那么我们这一条代码怎么理解呢?
其实是因为,最外层的括号先执行,所以内部的就是表达式了
所以最后的执行符号()就可执行了

Ps:若有错误,欢迎指出

猜你喜欢

转载自blog.csdn.net/leowahaha/article/details/107591935