ECMAScript与误区

版权声明:转载请注明出处,不得用于商用 https://blog.csdn.net/u010494023/article/details/83958046

最近在和一些年轻的js开发者的交流中,发现大家对于一些ECMAScript标准仍然有一些误区
来自我的博客

const

在一些网络文章中,经常可以看到对于const的一些描述,大多数都是说明: 一旦声明则不可进行修改的常量

我就经常会用这个来分辨一些只是浅尝辄止的开发者,也是我面试中的一个非常小的问题:

当我声明了一个常量数组后,我还可以向内推送元素么?

可惜很大一部分的同学都会回答我不能,因为声明了就不能改变。实际上,这里不能改变的不是值,而是指向的内存地址。

箭头函数

往往一些简单的特性所隐藏的功能则经常带来一些问题,我认识的一些开发者极其热衷于使用箭头函数,哪怕是在第三方的库中。

他们简单的认为箭头函数仅仅是简写了function关键字,然而当他们在一些内部函数或回调函数中尝试使用箭头函数的时候却发现,再也取不到相应this了。

Promise

Proimse普及之前,我们的代码经常是这样的:

a.do('sth', ra => {
    b.do('sth', rb => {
        c.do('sth', rc => {
            ...
        })
    })
})

拜异步特性所赐,我们的代码经常写的像锥子。

这时候Promise横空出世,然而周围的开发者90%居然会这么写:

a.then(ra => {
    b.then(rb => {
        c.then(rc => {
            ...
        })
    })
})

说实话,写的时候就没有疑问这和之前有什么区别么?

a
.then(ra => b)
.then(rb => c)
.then(rc => { ... })

解决回调嵌套地狱,才是Promise褒受欢迎的原因之一。

async

曾经有个同事向我强力推荐koa, 当时公司内部用express比较多,我就问他,为什么要用koa呢?

回答居然是koa能用async……

async并不是一个指向性那么强的特性,实际上很多地方都能简单的用到,比如express:

app.get('*', async (req, res) => {
    // do sth
})

还有的朋友问过我,我都使用了这个特性了,为什么代码还是不像我想象中的运行呢?

实际上async只是一个语法糖,只是让你用同步代码的编写方式来异步代码而已,ES6中其他大部分的特性同理。

Class

React充分应用着class的特性,虽然我没有仔细阅读过源码去看具体的实现是否和ES6中的完全相符,我经常看到这样的代码:

class Component extend React.Component {
    constructor (props) {
        super(props)
    }
}

实际上哪怕你不声明,class也会隐式的生成并调用构造函数。

还是Class

这仍然是原型链的一种实现,不要想太多了。

猜你喜欢

转载自blog.csdn.net/u010494023/article/details/83958046