node官方文档给的说明是
The asynchronous form always take a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be null or undefined.
在低版本浏览器中undefined值可能被修改,在node中似乎没有这个困扰。
从语义上来说应该传null,但是如果按照这个标准,没有错误也没有返回值的时候就必须要调callback(null)
而不能直接调callback()
了么?
两个混着用会造成多严重的后果?
总结一下我的理解:
先放结论:callback()
和callback(null)
是一样的。
首先callback(null)
无疑是正确的用法,null
表示没有错误。
其次,在函数中传undefined或者干脆什么都不传,就像callback()
一样。表示尊重这个参数的默认值。
恰巧,callback
函数的第一个参数的默认值就是null
。
所以callback()
和callback(null)
是一样的。
写完才发现,以下绝大多数的内容是跑题的“参考资料”,是该写博客的东西。
单看这个例子,确实
null
或undefined
都凑巧不会报错。不过从JS编程习惯的角度,必须注意:undefined
基本上不该直接用作有效的“值”去赋给变量,虽然JS允许如此。undefined
和干脆留空在语法上是同一语义,而在观感上甚至容易产生语义的歧义。(即看起来你传进去的是undefined
值,但对函数内部而言和不写是一样的。为了实现默认参数,函数可能把undefined
的参数改成别的值)undefined
是白费功夫,不如干脆不写。null
肯定是无歧义的最好办法。有对以下余兴节目感兴趣的,就接着看吧。
太长了!扔进了 http://blog.segmentfault.com/shamiao/1190000000381846