鉴于此:
function hello(name, option) {
if (option === 'useless') {
return '!!!!';
} else {
return 'Hi, ' + name;
}
}
如果省略option
参数,似乎没有任何不好的事情发生。我真的需要检查一下吗?
if (typeof option !== 'undefined' && option === 'useless')
答案 0 :(得分:5)
您不需要typeof
支票。
在函数范围内,形式参数始终有效identifiers。
感兴趣的规范部分:
§ 10.4.3 Entering Function Code
9。使用功能代码代码和 argumentList 执行声明绑定实例化,如10.5中所述。
§ 10.5 Declaration Binding Instantiation(强调补充)
4。如果代码是功能代码,那么
[...]
d。对于名称中的每个String argName ,按列表顺序执行
一世。设 n 为 n 的当前值加1 II。 如果 n 大于 argCount ,请将 v 设为undefined
,否则 v 为 args 的 n '元素的值。
[...]
v。调用 env 的SetMutableBinding具体方法,将 argName , v 和 strict 作为参数传递。
这意味着,对于调用参数不足的function f(arg) {}
(例如f()
),arg
绑定将在其execution context内初始化为undefined
(又称范围)。