函数参数中的中括号究竟代表什么呢？
1.这是我看某文档的时候产生的疑问，如一个node中的write方法：
`buf.write(string[, offset[, length]][, encoding])`
2.问题：函数参数中的中括号代表什么了？怎么有些只有半个括号，比如string[ 或 offset[;而有的却是length]][这样了？
3.还会有其他符号也有它独特代表的含义吗？
4.这种写法的好处是什么？
以上三个问题作一个问题回答。
简单的回答就是中括号表示这个参数非必须.
接下来详细解释。
首先，这样使用中括号只是出于一种的表达形式的需要而已(这样的表达形式很常见)，这与api本身是没有关系的。
然后，我们拿上面的例子来说
```
buf.write(string[, offset[, length]][, encoding])
```
对于`buf.write`这个方法：
第一个参数`string`是必须的，他表示你要写入的内容；往后的`offset`、`length`、`encoding`这些参数都是非必须的。这些参数你可以不传(用[]括起来表示不传)，但并不表示这三个参数你想怎么传就怎么传的，这里是有规则的，规则从这里中括号的对应关系中可以看出来。我们来看他的对应关系：`[, offset[, length]]` && `[ encoding]`。这表示`offset`、`length`和`encoding`你可以传或者不传,但是你要是没有传`offset`的话那`length`是一定不能传的，这就是为什么`length`要放在`offset`的括号里面的原因。
所以整个例子理解起来就是：
`string`必须传，`offset`、`length`、`encoding`可传可不传，但是`offset`不传的话`length`也不能传。
至于这样写有什么好处，我想这可能是当初写api那帮家伙觉得这样表达更合理吧，后面写文档的觉得这种方式还不错，就依葫芦画瓢了，慢慢的就约定俗成了。