1.首先理解什么是变量作用域
js中变量的作用域包括全局作用域和局部作用域
全局作用域指的是定义在函数之外的变量的作用域,局部作用域是定义在函数之内的变量的作用域。
区别:函数内可以访问全局作用域的变量,如果定义的变量没有var修饰,即使变量定义在函数中,也属于全局作用域,只是需要等到函数执行,该变量才能生效
注意:函数作用域优先于全局作用域,变量提升(声明会提升)
2.闭包是什么?
定义一个匿名函数然后立即执行,将需要块级作用域的变量作为函数的参数传入,这样函数内使用的变量就是参数,而不是全局作用域的变量或者其他变量
3.为什么要用闭包?
如果一个函数想访问另一个函数内部的变量,将这个函数定义在另一个函数内部,就能够访问另一个函数的内部变量,这个过程叫做闭包。
4.闭包的使用场景
//闭包的使用场景
//一、返回值
function fun1 () {
var name = "xiaojiang"
return function () {
return name
}
}
var fun2 = fun1()
console.log(fun2())
//二、函数赋值(要先执行函数 才能进行赋值)
function fun3 () {
var age = 18
fun4 = function () {
return age
}
}
fun3()
console.log(fun4())
//方法三、 函数参数
function fun5 () {
var hobby = '喝水'
return function callback () {
return hobby
}
}
var fun6 = fun5()
//定义一个匿名的函数,将需要块级作用域的变量作为参数传入,然后立即执行该函数,将变量传进去
function fun7 (f) {
console.log(f())
}
fun7(fun6)