CodeQL 文档

默认参数引用嵌套函数

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

单击以在 CodeQL 仓库中查看查询

默认参数值只能引用在参数之前定义的变量和函数。特别是,它们不能引用在函数体内部定义的嵌套函数,因为它们的定义在计算默认参数值之后才会被评估。

建议

将函数移到封闭作用域中,以便它可供默认参数使用。

示例

在以下示例中,函数 f 的参数 y 的默认参数值是使用函数 defaultVal 从参数 x 的值计算出来的。但是,由于 defaultValf 本身内部定义,因此在评估 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;
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私