闭包到底是个什么鬼?
![]() 在JavaScript这门语言中,闭包是它的核心基础之一,可以说是一个特色了,但是很多从事前端工作的程序员并没有真正的理解它! 闭包有多重要?如果你是初入前端的朋友,我可以肯定得告诉你,前端面试,必问闭包。面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上。 通过本文讲解,希望你可以重新认识一下闭包! 函数调用时发生了什么? 为了理解闭包,首先我们需要完全理解 JavaScript 到底是如何工作的! 那么函数调用是会发生什么呢? 当浏览器在解析 JS代码的时候,会进行一个预解析的操作,会有一个js解析器,里面会执行其中的两步操作: 1、预解析,找一些东西(var function 参数); 2、逐行去解读代码。 当解析器解读函数调用时,会将整个函数执行一个入栈操作,并为函数创建一个新的执行上下文。函数内部可以看作是一个小的区域,它有它自己的作用域和执行线程,也要逐行解读。当函数显式返回(到达return语句)或隐式返回(默认情况下函数返回undefined)时,函数将出栈,其执行上下文也将被销毁。 闭包是什么鬼? 我们先来看下这段代码: 发现,子函数 printHi 可以访问全局作用域和其父函数 greet 的局部作用域。 注意,我们实际上可以访问函数执行期间可用的“新”数据,而不是声明。这就是词法作用域在 JavaScript 中的工作方式。 但是如果我们返回一个函数,而不是仅仅在外部函数体中调用它,会发生什么呢? 看好了,奇迹出现了! 从一个函数中返回的函数不仅仅是一个简单的函数定义,它是这个定义加上它可以访问并需要执行的变量,这些变量存储在它附带的词法作用域中。
我们刚刚描述的就是闭包。从 在JavaScript这门语言中,闭包是它的核心基础之一,可以说是一个特色了,但是很多从事前端工作的程序员并没有真正的理解它! 闭包有多重要?如果你是初入前端的朋友,我可以肯定得告诉你,前端面试,必问闭包。面试官们常常用对闭包的了解程度来判定面试者的基础水平,保守估计,10个前端面试者,至少5个都死在闭包上。 通过本文讲解,希望你可以重新认识一下闭包! 函数调用时发生了什么? 为了理解闭包,首先我们需要完全理解 JavaScript 到底是如何工作的! 那么函数调用是会发生什么呢? 当浏览器在解析 JS代码的时候,会进行一个预解析的操作,会有一个js解析器,里面会执行其中的两步操作: 1、预解析,找一些东西(var function 参数); 2、逐行去解读代码。 当解析器解读函数调用时,会将整个函数执行一个入栈操作,并为函数创建一个新的执行上下文。函数内部可以看作是一个小的区域,它有它自己的作用域和执行线程,也要逐行解读。当函数显式返回(到达return语句)或隐式返回(默认情况下函数返回undefined)时,函数将出栈,其执行上下文也将被销毁。 闭包是什么鬼? 我们先来看下这段代码: (编辑:张家口站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


