用生命谱写代码的赞歌

0%

JS 面试题(一)

闭包面试题

闭包就是能够读取其他函数内部变量的函数。

由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包有两个作用,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function fun(n, o) {
console.log(o)
return {
fun: function(m) {
return fun(m, n)
}
}
}

var a = fun(0) // undefined
a.fun(1) // 0
a.fun(2) // 0
a.fun(3) // 0

var b = fun(0).fun(1).fun(2).fun(3) // undefined 0 1 2
var c = fun(0).fun(1) // undefined 0
c.fun(2) // 1
c.fun(3) // 1
b.fun() // 3
var d = b.fun()
d.fun() // undefined