web前端全系列 教程
1839个小节阅读:2243.9k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
闭包(closure)是 Javascript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现
理解闭包,首先必须理解变量作用域
要理解闭包,首先必须理解Javascript特殊的变量作用域
变量的作用域无非就是两种
xxxxxxxxxx
var n = 100;
function getNum(){
console.log(n);
}
getNum(); // 100
另一方面,在函数外部自然无法读取函数内的局部变量
xxxxxxxxxx
function getNum(){
var n = 100;
}
console.log(n); // error
温馨提示
这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量
出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现
那就是在函数的内部,再定义一个函数
xxxxxxxxxx
function getNum(){
var n = 100;
function getN(){
alert(n); // 100
}
}
既然getN
可以读取getNum
中的局部变量,那么只要把getN
作为返回值,我们不就可以在getNum
外部读取它的内部变量了吗
xxxxxxxxxx
function getNum(){
var n = 100;
function getN(){
console.log(n);
}
return getN;
}
var result = getNum();
result(); // 100
上述代码中的getN
函数就是闭包
各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。我们参考老前辈的理解是:闭包就是能够读取其他函数内部变量的函数
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁
实时效果反馈
1. 下列关于作用域代码,输出结果正确的是:
xxxxxxxxxx
function getName(){
var username = "itbaizhan";
console.log(username);
}
getName();
console.log(username);
A itbaizhan itbaizhan
B 报错
C itbaizhan
D itbaizhan 报错
答案
1=>D