《实战ES2015》之var、let、const

《实战ES2015》之var、let、const

《实战ES2015》之var、let、const

前言

一直想学习ECMAScript(ES),但是一直没有行动,这次从网上找到这本书(讲的是ES5),还是准备看下再去接触ES6。

let 与 var 的异同点比较

《实战ES2015》之var、let、const

var可以让同一个变量名在同一个作用域里被定义多次,而这种“特性”很可能会导致一些问题。而使用let定义,当同一个变量名在同一个域内被定义第二次时,便会抛出错误,以警示开发者修改代码

下面这段代码科直观的说明for循环中使用var和let的区别

《实战ES2015》之var、let、const

const

const的实现原理确实只限创造一个不可变的内存绑定,而在某些情况下,并非值不可变。

《实战ES2015》之var、let、const

foo对象字面量定义的内存存储空间

《实战ES2015》之var、let、const

const在这段代码中所起到的作用是:将常量foo与内存偏移值为0的内存空间绑定起来并锁死。然而内存偏移值分别为1和2的a和b属性并没有得到强绑定,导致了以下情况的发生。

《实战ES2015》之var、let、const

字符串、数字、布尔值等值类型因为只使用了一段内存空间,并不会有如上这种问题。对象、数组等稀疏引用类型值会存在这种问题。

如何解决

我们只要配合ES5中的Object.freeze()方法

《实战ES2015》之var、let、const

除了let会产生块级作用域以为,const同样可以产生块级作用域,其定义的常量也同样遵循变量在作用域中的生命周期。也就是说,与我们熟知的全局变量不同的是,使用const定义的常量同样是可以灵活使用的,比如定义一些只针对缪戈作用域或是某个函数、算法内的常量。

一旦js引擎进入一个作用域时,会先扫描该作用域内的定义语句。且被扫描到的变量名都会进入未声明阶段。以下代码来理解这点:

《实战ES2015》之var、let、const

闭包的原理便是利用高阶函数来产生能够穿透作用域的引用

《实战ES2015》之var、let、const

未完待续……Continued……

希望这篇文章能给你带来知识和乐趣,喜欢作者的文章可以关注作者哦。


分享到:


相關文章: