js中使let关键字报错,改用var关键字解决
- 项目场景:
- 问题描述
- 原因分析:
- 解决方案:
- 总结

项目场景:
使用 let 关键字报错,报错信息为:
Uncaught ReferenceError: maxNum is not defined at getMaxNum (4-3.html:17:17)
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script>
            function getMaxNum(){
                for (var i = 0; i < arguments.length; i++) {
                    let maxNum = -1
                    if (maxNum < arguments[i]) {
                        maxNum = arguments[i]
                    }
                }
                return maxNum
            }
            console.log(getMaxNum(1, 10, 5));
        </script>
    </body>
</html>
问题描述
改用var声明又不会报错了
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script>
            function getMaxNum(){
                for (var i = 0; i < arguments.length; i++) {
                    var maxNum = -1
                    if (maxNum < arguments[i]) {
                        maxNum = arguments[i]
                    }
                }
                return maxNum
            }
            console.log(getMaxNum(1, 10, 5));
        </script>
    </body>
</html>
原因分析:
在 JavaScript 中,使用 let 声明的变量具有块级作用域,而使用 var 声明的变量则具有函数级作用域。在代码中,let maxNum = -1 语句位于 for 循环的内部,这意味着 maxNum 变量的作用域仅限于 for 循环内部。因此,在 for 循环外部(例如在 return 语句之后)尝试访问 maxNum 变量会导致 “maxNum is not defined” 的错误。
而当你使用 var 声明时,变量的作用域是整个函数,所以 var 声明的 maxNum 变量在整个函数范围内都是可见的,这就解释了为什么使用 var 就不会报错了。
并且 let maxNum = -1语句位于循环内部,每次迭代时都会重新声明并初始化 maxNum 变量。这意味着在每次循环迭代时,maxNum 的值都会被重置为-1
解决方案:
如果你希望使用 let 声明并且避免出现报错,只需将 let maxNum = -1 移动到 for 循环外部即可,使其作用域覆盖整个函数。这样,maxNum 变量就可以在整个函数中使用。

总结
个人觉得使用 let 代替 var 声明可以使代码更加规范。

![蓝桥杯(5):python动态规划DF[2:背包问题]](https://img-blog.csdnimg.cn/direct/0caab64c3f4d4ba69bd2c208e455ab64.png)
















