JS--作用域和闭包

作用域

image.png

1、全局作用域
2、函数作用域
3、块级作用域(ES6新增)
if(true){
let x = 100
}
console.log(x) //会报错

自由变量

1、一个变量在当前作用域没有定义,但被使用了
2、向上级作用域,一层一层依次寻找,直至找到为止
3、如果到全局作用域都没有找到,则报错xx is not defined

闭包

1、函数作为返回值和函数作为参数


image.png

闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方查找


image.png

this

1、this的使用范围:
(1)作为普通函数调用
(2)使用call apply bind
(3)作为对象方法被调用
(4)在class方法中调用,指向当前实例本身
(5)箭头函数调用,找上级作用域

2、this取什么值,是函数在执行的时候确认的。不是在定义的时候确认的。

3、bind和call的区别:
(1)bind返回一个函数,需要重新执行该函数,才能获取调用函数后的值。
(2)call是直接调用,返回该函数的值。


image.png

4、this的指向
(1)在setTimeout(function(){

})中执行的this,调用类似于将函数作为参数传递,这里的this是指向外层的window
(2)箭头函数的thIs,是取上级作用域的值,是当前的对象


image.png

5、
image.png

7、实际开发中闭包的使用,举例说明?
(1)作为参数转入,(2)作为函数返回,
(3)隐藏数据


image.png

8、创建10个a标签,点击哪个就显示哪个数字。
以下是正确的:


image.png

以下是错误的:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容