美文网首页
前端高频词汇(一)--闭包

前端高频词汇(一)--闭包

作者: 卡西莫多cc | 来源:发表于2016-08-07 23:47 被阅读0次

在JavaScript中变量分为两种:全局变量和局部变量;顾名思义,全局变量就是定义在全局作用域下面的变量,js中比较特别的地方就在于,全局变量在任何地方都可以直接调用。局部变量就是定义在函数内部作用域下的变量,只能在函数内部被引用。理解闭包首先就要理解嵌套函数的语法作用域的相关规则,看下面一段代码:

var scrop="global";//声明一个全局变量

function checkscrop(){

var scrop="local";//声明一个局部变量

function f(){

return scrop;//在作用域中返回该值

}

return f();

}

var result=checkscrop();//result的值为local

以上代码很容易懂,在函数内部定义一个局部变量,并定义一个函数返回该变量,然后将该函数执行结果返回,现在我们对代码做一点小小的改动

var scrop="global";//声明一个全局变量

function checkscrop(){

var scrop="local";//声明一个局部变量

return function(){

return scrop;

}//返回一个函数对象

}

var result=checkscrop()();//result的值为local

两次返回的结果都是local,表面上看两段代码没有什么区别,认真来看,第一次执行checkscrop()返回的是一个计算好的结果,而第二段代码中执行checkscrop()返回的是一个函数对象,然后在调用这个函数对象,这就是一个简单的闭包,同时通过第二段代码可以看出,变量的作用域是通过函数创建时候被定义的,而不是在函数被调用是才定义。

如果你理解了以上作用域的规则,你就很容易理解闭包了。

闭包实际上就是为了方便外部访问函数内部的变量实现的,通俗的形式就是一个函数A嵌套另一个函数B并返回函数B,函数B引用了函数A中定义的变量,代码如下:

function A(){

var a="闭包";

return function B(){

return a;

}

}

var result=A();

result();

以上就是一个简单的闭包,之所以实现闭包有两个好处,第一个是方便了函数外部可以访问到函数内部的变量,其次,函数内部的变量在函数执行完成之后可以一直保存在内存中不被回收,在某些场景下为我们提供便利。

同时由于闭包产生的变量会被存储在内存中不被回收,消耗内存,在IE中可能会造成内存泄漏,所以不能滥用闭包,在使用闭包的过程中,在函数执行完成之后将不必要的变量设置为null释放内存。

在文章的最后作者顺带提一下js的垃圾回收机制:

我们将作用域描述为一个对象,每次调用函数的时候就会将函数申明的变量存储在这个作用域对象中,函数在return的时候讲这个对象删除,如果函数不存在嵌套的函数,这个对象就会被当做垃圾回收掉,如果嵌套了一个函数,并且将这个函数作为返回值返回,那么这个嵌套函数所使用的变量就不会被删除。

相关文章

  • 前端高频词汇(一)--闭包

    在JavaScript中变量分为两种:全局变量和局部变量;顾名思义,全局变量就是定义在全局作用域下面的变量,js中...

  • JS-读懂闭包

    长久以来,闭包是前端同学面试必考的问题。会用闭包也成了高级前端开发者的标志,今天就来彻底弄清楚闭包的每一个细节。 ...

  • 闭包

    title: 闭包date: 2018-05-27 23:00:00tags: 闭包categories: 前端 ...

  • 什么是闭包

    从入行就有人跟我说闭包,到现在闭包也是前端躲不开的概念,每次面试的时候我也会问一下闭包相关的问题,今天针对闭包写一...

  • 理解js中的闭包以及应用场景

    在js中的学习中,总会遇到一个陌生又晦涩,然后还是陌生的词汇,那就是闭包。 首先,什么是闭包? 其次,闭包的作用是...

  • 我理解的JavaScript闭包

    闭包是前端开发中的一个重要概念,也是前端面试的必问问题之一。对于JavaScript初学者而言,闭包学习JavaS...

  • [程序员每日5分钟]JS 中的闭包是什么

    闭包 是前端开发者面试必问的一个知识点。1、什么是闭包?2、闭包的作用是什么? 一、变量的作用域 你要学习和理解闭...

  • Js中的闭包

    闭包 是前端面试必问的一个知识点 one: 什么是闭包 two: 闭包的作用是什么 一、变量的作用域 全局变量 和...

  • 好程序员web前端培训分享web前端面试题JS篇之闭包

    好程序员web前端培训分享web前端面试题JS篇之闭包,JS中关于闭包的相关知识。如果你想参加web前面工作,那么...

  • 前端菜鸟帝都一月面试记(答案)

    原文见前端菜鸟帝都一月面试记 闭包和继承,手写继承的几种方式。 闭包看《你不知道的javaScript》上面说,闭...

网友评论

      本文标题:前端高频词汇(一)--闭包

      本文链接:https://www.haomeiwen.com/subject/zhglsttx.html