作用域
1、全局作用域
2、函数作用域
3、块级作用域(ES6新增)
if(true){
let x = 100
}
console.log(x) //会报错
自由变量
1、一个变量在当前作用域没有定义,但被使用了
2、向上级作用域,一层一层依次寻找,直至找到为止
3、如果到全局作用域都没有找到,则报错xx is not defined
闭包
1、函数作为返回值和函数作为参数
闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方查找
this
1、this的使用范围:
(1)作为普通函数调用
(2)使用call apply bind
(3)作为对象方法被调用
(4)在class方法中调用,指向当前实例本身
(5)箭头函数调用,找上级作用域
2、this取什么值,是函数在执行的时候确认的。不是在定义的时候确认的。
3、bind和call的区别:
(1)bind返回一个函数,需要重新执行该函数,才能获取调用函数后的值。
(2)call是直接调用,返回该函数的值。
4、this的指向
(1)在setTimeout(function(){
})中执行的this,调用类似于将函数作为参数传递,这里的this是指向外层的window
(2)箭头函数的thIs,是取上级作用域的值,是当前的对象
7、实际开发中闭包的使用,举例说明?
(1)作为参数转入,(2)作为函数返回,
(3)隐藏数据
8、创建10个a标签,点击哪个就显示哪个数字。
以下是正确的:
以下是错误的: