两分钟给你讲清楚 JavaScript 中的闭包与 this

用户头像
在沉默中
关注
发布于: 2020 年 08 月 20 日
两分钟给你讲清楚JavaScript中的闭包与this

如果没有学过其他语言就学习JavaScript,那么大概率会先学习作用域链,然后觉得内层函数可以访问外层函数中的变量理所当然,以至于很难接受this动不动就指向全局

但在其他语言里并不是这样,this的操作才是常态,作用域链才难以接受。理由见下图红圈中部分,内容截取自《JavaScript权威指南》

《权威指南》的作者把作用域链的概念放到了靠前的位置,结果导致初学编程者产生了与前人相反的困惑。



其实问题并不在两个概念出现的顺序上。它们分别有各自的用途,也都很合理,只是作者没讲清楚。

要搞明白很简单,一个概念就能把两个看似相对的概念联系起来,即: 

函数声明调用是分离的,是两回事。

函数变量函数声明时所处的环境(调用上下文)有关,即作用域链。而this指针适合函数调用时所处的环境(调用上下文)有关,但还有一个需要注意的点是: JavaScript中环境即当前对象包含的所有变量。如果一个函数不直接属于某个对象属性,那该函数便属于全局对象,这就是this动不动就指向全局对象的原因,如果我们要在某个环境下调用函数,那就把该函数对象复制一份。



初学编程,如有错误,欢迎指正。

发布于: 2020 年 08 月 20 日 阅读数: 808
用户头像

在沉默中

关注

碳氢碘氖硒 2020.05.13 加入

还未添加个人简介

评论

发布
暂无评论
两分钟给你讲清楚JavaScript中的闭包与this