Nodejs 的ES6支持情况查看

  • node.js发展非常快,对es6特性的支持也越来越良心,但node.js版本很多,各版本对es6的支持度都不一样,为了能清晰的了解各版本对es6特性的支持,需要有一个工具能提供比较清晰的支持说明,甚至于能提供在程序中调用检测对某特性的支持,帮助程序里有选择性的使用es6特性。

  • es-checker提供了比较好用的相关功能,可以提供检测当前的node,并提供特性支持说明,也可以在程序中提供方法检测某特性是否支持。

  • 全局安装

    script
    1
    npm install es-checker -g

安装后,在命令行中执行后就可以查看了
es-checker

网站在线查看: https://node.green/

Nodejs this注意事项

  1. 全局中的this指向的是(初始时的)module.exports;

    默认情况先我们知道模块加载时是先定义了module.exports={};(其实就是这个模块的this) ,然后让exports指向了它:exports = module.exports,注意了重点来了,全局的this指向的是这个初始对象this = module.exports={};但是如果我们显示的重新定义了module.exports=*;它并不会改变exports和this原有的指向(因为这是初始化就完成的),所以全局的this使用就是使用exports,该注意的事项和使用exports一样。

  2. 在函数中this指向的是global,这里的函数指普通函数,不是类函数;

    上面这种情况是模块中定义函数,模块中使用函数,但如果该函数被导出来,很明显调用者就是被导出的对象module.exports了。

  3. 在构造函数中this指向的是它的实例,而不是global;

    这个不难理解,构造函数本身的特性。

实际上要理解这个,就必须得理解nodejs的模块化的作用域和一条真理“不管是浏览器还是nodejs,谁直接调用了那个函数this就是谁,不管函数位于什么作用域,在调用时没有指明调用者,调用者就是global或window”,即每个模块都有自己的作用域。同时还有牵涉到exports和module.exports导出定义方式。

总结下来和浏览器唯一不同是模块中全局的this是初始化时的模块对象module.exports;浏览器中是window

箭头函数还是箭头函数的规则,this由函数定义时的上下文决定,nodejs中也一样,不过使用时要注意this指向的是初始的module.exports,如果重新定义了module.exports,就不能使用module.exports访问到了;

箭头函数比较重要的规则

普通函数内部定义的箭头函数,上下文是global或window;

类函数内部定义的箭头函数,上下文是类的实例;

NodeCallback 概念

概述

  1. nodeCallback 是 Nodojs 中的一个常用词。表达是意思是:Nodejs 中,以错误优先的回调函数的总称。

  2. 它包括两个意思:
    nodeCallback 回调函数签名。
    nodeCallBack 回调函数出现的位置。
    nodeCallback 签名

  3. 该回调函数的签名一定是这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 这样是对的
    function fooCallBack(err, a, b){
    // something
    console.log(a,b);
    }
    // 这样不对
    function foo1CallBack(a,b,err){

    }

    可以看到,fooCallBack 函数的调用参数中,第一个参数是: err, 也就是说的 noodeCallBack 函数的第一个参数一定传入的是 err ,而不能是别的参数。只要满足了这个条件,都可叫 nodeCallback。
    nodeCallBack 出现的顺序
    nodeCallBack 一定出现在异步函数的最后一个,也就是这样:

    1
    2
    3
    4
    5
    6
    7
    8
    // 这样是对的。
    function foo(a,b,nodeCallback){
    // pass
    }
    // 这样就不是 nodeCallback
    function foo(a,nodeCallback,b){
    // pass
    }

只要满足了签名和顺序,就可以叫做 nodeCallBack。
那 nodeCallback 存在哪里呢?告诉你吧,所有的 NodeJS 标准包中异步的地方都是它。

参考:如何把函数都用promise方式实现?