闭包
先了解一下js的变量作用域
一、全局变量:作用域为所属的整个程序
var n = 123;
function f1() {
console.log(n);
}
f1(); // 123
二、局部变量:作用域为所属的函数内部
function f2(){
var a=100
console.log(a);
}
f2()
注意:
在JavaScript中,函数内部可以使用全局变量,函数外部不可以使用局部变量。
如果要从外部读取局部变量,那就在函数内部,再定义一个函数。
var a = 10 // 全局变量
function f1() { // 全局函数 // 局部作用域
var b = 20
function f2() { // 局部作用域
var c=30
console.log(c); // a=10 b=20 c=30
}
f2()
}
f1()
这里来引入闭包的定义
一、闭包
1.定义:闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取容局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
2.特点:闭包是一个函数,内部函数使用了外部函数的变量
简单来说:一个函数中套一个函数,里面的函数就是闭包
function f1(){
var a=10
// f2 函数就叫做闭包
function f2(){
return a
}
return f2 // return f2 是为了可以使用f2函数
}
var fn=f1() // fn=f2
console.log(fn()); // 10
或者可以写成匿名函数
function f1(){
var a=10
return function (){
return a
}
}
var fn=f1() // fn就是上面return返回的函数
console.log(fn()); // 10
案例:
function num(x) {
return function (y) {
return x + y
}
}
ber = num(10)
console.log(ber(20)); // 20+10=30
// num(10)这里10=x,bre是return返回的函数,所有bre(20)是function(y),20=y