linux高级程序设计第三版_读javaScript高级程序设计第三版的部分总结

e4dd79355c9784cbbded198a24b69de7.png

我是一名前端开发人员,现在正在读的是javaScript高级程序设计,其实这本书我在之前的工作中粗略的看过一遍,第一次看这本书的时候就是随便的翻了翻目录,然后再从目录中查找自己哪些不会的地方。

我想和大家说下,我为什么看这本书?我在实际开发工作中,发现如果你想提高自己的开发效率、javaScript编程能力以及对代码的可维护性和对性能的优化。那么你就需要去读懂这本书,去研究这本书。比如举个很简单的例子,如果你想实现对象的遍历,你首先会想到什么办法,使用对象的for...in...语法?Object.keys?还是用其他的方法呢?我在读这本书的时候发现,其实在对象的遍历中还包括其他的很多细节性的东西,例如,对象中的属性有数据属性和访问器属性,其中又有enumerable表示是否可以通过for...in...循环返回属性。使用不同的方法遍历对象,性能不同,方式不同,但是这些东西在我们工作开发中时候很少会感受到,就对象的遍历而言,我们通常就是直接使用这些方法去遍历,而不是想这些东西是怎么来的,它的底层是怎么实现,对于我们编写可维护性的代码以及提高代码的性能有哪些帮助,我们都没有进行考虑过。

下面,我就两个方面总结下我最近看的内容。第一个就是关于javaScript中的闭包的问题。首先,闭包是通过什么样的方式形成的?闭包实际上有权限访问另一个函数作用域中的变量的函数。比如,在一个函数内容定义另外一个函数,内部的函数访问外部函数的变量,这就形成了闭包。例如

function createFunction(num){

return function (){

if (num>2) { return true } else { return false }

}

}

这个内部函数调用了外部函数中的num变量。在作用域链中,当某个函数被调用时,会创建一个执行环境以及相应的作用域链。然后,使用arguments和其他命名参数的值来初始化函数的活动对象。但在作用域链中,外部函数的活动对象使用处于第二位,外部函数的外部函数的活动对象始终处于第三位,一次类推,知道作用域终点的全局执行环境。比如我在全局作用域中定义一个函数

function create(num){

if(num > 2){ return true } else { return false }

}

var result = create(3)

当我在全局作用域中调用create函数的时候,会创建一个包含arguments、this、 以及num的活动对象。全局执行环境的变量对象在compare()执行环境的作用域链中则处于第二位。

后台的每个执行环境都有一个表示变量的对象——变量对象。创建create函数的过程中,首先是创建一个包含全局变量对象的作用域链,这个作用域链被保存在内部的【scope】中,可以通过浏览器的控制面板sources面板查看,当调用create函数的时候,会先为函数创建一个执行环境,然后通过复制函数的【scope】属性中的对象构建起执行环境的作用域链,此后,又有一个活动对象被创建并被推入执行环境作用域链的前端。

对于闭包的缺点。普通的函数在执行完毕的时候,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象)。但是闭包在函数执行完毕之后。活动对象不会被销毁,因为内部函数的作用域链仍然在应用这个活动对象。例如上面的闭包:create()函数返回一个匿名函数,在匿名函数被返回的时候,匿名函数的作用域链被初始化为包含create()函数的活动对象和全局变量对象。这样,匿名函数就可以访问create()中定义的所有的变量。create()函数在执行完毕后,create()的活动对象也不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。直到匿名函数被销毁后,create()函数的活动对象才会被销毁。正是因为闭包会携带包含它的函数的作用域。,因此会比其他函数占用更多的内存空间,过多的使用闭包会导致内存占用过多,影响性能。在使用闭包的使用,也会导致一些内存泄露的问题。因此使用闭包应该谨慎使用。

今天就分享这一个闭包的问题。后续会给大家分享关于javaScript中的值类型和引用类型,js中的原型链、继承等等,我也会在后面的文章中分享一些我在工作中经常会遇到的问题。我自己的微信公众号是缘生味,里面会有一些简单的html,css的一些教程,如果大家想去学习的话可以关注我的微信公众号,我会将这些资料免费提供给大家的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值