JavaScript可选参数,我需要检查undefined吗?

Cap*_*ack 2 javascript

鉴于这种:

function hello(name, option) {
  if (option === 'useless') {
    return '!!!!';
  } else {
    return 'Hi, ' + name;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果option省略参数,似乎没有任何不好的事情发生.我真的需要检查一下吗?

if (typeof option !== 'undefined' && option === 'useless')
Run Code Online (Sandbox Code Playgroud)

Fab*_*tté 5

你不需要typeof检查.

形式参数始终是函数范围内的有效标识符.

感兴趣的规范部分:

§10.4.3输入功能代码

9.使用函数代码codeargumentList执行声明绑定实例化,如10.5中所述.

§10.5声明绑定实例(重点已添加)

4.如果代码是功能代码,那么
    [...]
    d.每串argName名称,在列表顺序做
        我.设nn加1 的当前值
        .如果Ñ大于argCount,让vundefined否则令v为值Ñ个的元素" ARGS.
        [...]
        v.调用env的SetMutableBinding具体方法,将argName,vstrict作为参数传递.

这意味着,对于function f(arg) {}参数不足的调用(例如f()),arg绑定将被初始化undefined为其执行上下文(又称范围).