全局变量:全局变量存在于整个程序的运行过程中,随处都可以访问,也就意味着随处都可以修改。
局部变量:只有在当前函数内部才可以访问的变量,别的地方不能访问也不能修改。
什么是闭包?
函数和对其周围状态的引用捆绑在一起构成闭包;也就是说,闭包可以让你从内部函数访问外部函数的作用域,在js中,每当函数被创建,就会在函数生成时生成闭包。
闭包就是由嵌套函数形成的一个词法环境。
有了闭包,我们就可以在一个函数里访问另一个函数的局部变量,这个变量可以重复使用且不会造成全局污染。
例如:
function func () {
let n = 1;
function func2() {
return ++n;
}
return func2
}
const funcTest = func()
console.log(funcTest()) // 2
console.log(funcTest()) // 3
console.log(funcTest()) // 4
console.log(funcTest()) // 5
const funcTest2 = func()
console.log(funcTest2()) // 2
console.log(funcTest2()) // 3
console.log(funcTest2()) // 4
console.log(funcTest2()) // 5
以上代码就是一个经典的闭包,一般构成闭包有三步:
1.外层函数嵌套内层函数
2.内层函数使用外层函数的局部变量(或参数)
3.将内层函数作为外层的返回值
由此可见:
1.在一个函数里访问另一个函数的局部变量,也就是访问另一个作用域
2.变量既可以重复使用,又不会全局渲染(因为别的地方访问不到)
每调用一次外层函数就得到一套闭包,多次调用时多个闭包,不会互相影响