默认参数引用嵌套函数¶
ID: js/nested-function-reference-in-default-parameter
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- reliability
- correctness
Query suites:
- javascript-security-and-quality.qls
默认参数值只能引用在参数之前定义的变量和函数。特别是,它们不能引用在函数体内部定义的嵌套函数,因为它们的定义在计算默认参数值之后才会被评估。
建议¶
将函数移到封闭作用域中,以便它可供默认参数使用。
示例¶
在以下示例中,函数 f
的参数 y
的默认参数值是使用函数 defaultVal
从参数 x
的值计算出来的。但是,由于 defaultVal
在 f
本身内部定义,因此在评估 y
的默认值时它尚未定义,这会导致运行时错误。
function f(x, y = defaultVal(x)) {
function defaultVal(x) {
return x+19;
}
return x*y;
}
为了解决此问题,defaultVal
应该被移到外部作用域中,以便它可以被 y
使用。
function defaultVal(x) {
return x+19;
}
function f(x, y = defaultVal(x)) {
return x*y;
}
参考¶
Mozilla 开发者网络:默认参数。