作用域和闭包
- this的不用应用场景如何取值
- 手写bind函数
- 闭包在实际开发中的应用场景
- 创建10个a标签,点击时候弹出来对应的序号
作用域:某个变量合法的使用范围,上图中a可以在最外层的红框里使用
- 全局作用域
- 函数作用域
- 块级作用域
自由变量
一个变量在当前作用域没有定义,但被使用了
向上级作用域,一层一层依次寻找,直到找到为止
如果全局作用域都没有找到,则报错xx is not defined
闭包
作用域应用的特殊情况,有两种表现
- 函数作为参赛被传递
- 函数作为返回值被返回
//函数作为返回值
function create(){
let a = 100
return function(){
console.log(a)
}
}
let fn = create()
let a =200
fn() // 100
function print(){
const a = 200
fn()
}
const a = 100
function fn(){
console.log(a)
}
print(fn)//100
闭包:自由变量的查找是在函数定义的地方向上级作用域查找,不是在执行的地方