前端常见知识点(一)

前端常见知识点(一)

三月 06, 2019

闭包

什么是闭包?

常见的理解,用「红宝书」中的话说就是:闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另一个函数。

例如:

1
2
3
4
5
6
7
8
function greetFunc () {
var greet = 'Hello!'
function foo () {
console.log(greet)
}
foo()
}
greetFunc() // greet

在这段代码中,函数foo()成功打印出了在其父函数中定义的greet变量的值,这就形成了一个闭包。

闭包有什么用?

常见的理解,闭包一般用来「间接」访问一个变量,或者说,「隐藏」一个变量。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
function greetFunc() {
var greet = 'Hello!'
this.getGreet = function () {
return greet;
}
this.setGreet = function (value) {
greet = value
}
}
var foo = new greetFunc()
console.log(foo.getGreet()) // Hello!
foo.setGreet('Bonjour!')
console.log(foo.getGreet()) // Bonjour!

这样,在greetFunc()函数外部,我们就可以通过getset方法来访问函数内部的变量greet了。