JavaScript的函数之自执行函数和闭包
前面讲到js函数的基本分类及使用,今天我们来聊一下自执行函数的原理以及简单闭包原理。
1.自执行函数
说到自执行函数,其实就是函数不用被调用,自身执行代码块代码。整体思路如下代码:
1.按照我们的想法,先声明一个匿名函数,然后在函数后面加上(),但是会发现报错。如下图:
按照上面的思路去理解,在匿名函数后面直接加上()应该是可以立即执行的,但这个函数报错了,而且报了两个错误,是因为浏览器在解析js代码的时候,遇到function会当做函数声明,然后检查语法,函数声明必须要有函数名,所以报错;第二个括号处的语法错误在于函数声明到花括号处,就已经结束了,后面的()会被当作分组操作符,这个()实际上已经和函数声明没关系了,但是既然有了分组操作符,那就要有表达式,不然会报错。
2顺着错误原因修改,代码如下:
//首先给方法加上名字,同时在第二个()中加入表达式,如下:
function func(){
}(1)
// 此时代码不报错了,但是上面函数并没有立即执行,因为前面已经说过了,函数声明到{}末尾函数已经结束了,所以后面的()和函数没有关系,所以继续修改代码如下:
(function (){
console.log("自执行函数");
}())
// 推荐此方法
(function (){
console.log("自执行函数1");
})()
//是指是在function前面加上任意的操作符,让浏览器解析代码时,不将 function 开头的函数解析为函数的声明,如下:
+function (){
console.log("自执行函数2");
}()
2.闭包
闭包就是能够读取其他函数内部变量的函数。因为只有函数内部的子函数才能读取局部变量,所以在本质上,闭包是函数内部和函数外部连接起来的桥梁。
简单举例如下:
// 通常情况下,涉及到变量的作用域问题,函数外面是不可以获取函数内部的变量的
function func(){
var num=10;
}
// 调用函数
func();
console.log(num);//num is not defined
//通过闭包,可以在函数外面访问函数内部的变量
function func1(){
var num2=20;
function func2(){
return num2;
}
return func2();
}
console.log(func1());//20
通过return,将函数作为返回值返回,同时返回的函数中再返回函数func2内的变量,这是函数外面就可以获取到函数内部的变量了。
视频讲解地址:
1.https://www.bilibili.com/video/BV1QK411W7gT/