js中使let关键字报错,改用var关键字解决

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 声明可以使代码更加规范。

相关推荐

  1. C# var 关键字

    2024-04-06 08:58:03       14 阅读
  2. MySQLEXPLAIN关键字解释

    2024-04-06 08:58:03       32 阅读
  3. js letvar 的区别

    2024-04-06 08:58:03       34 阅读
  4. C++ 关键字 Static

    2024-04-06 08:58:03       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 08:58:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 08:58:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 08:58:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 08:58:03       20 阅读

热门阅读

  1. 第七章:实战项目演练

    2024-04-06 08:58:03       13 阅读
  2. 电脑启动引导的两种方式

    2024-04-06 08:58:03       12 阅读
  3. RobotFramework测试框架(7)-SeleniumLibrary常用关键字

    2024-04-06 08:58:03       10 阅读
  4. 自动化运维(五)Ansible 之 inventory详解

    2024-04-06 08:58:03       12 阅读
  5. vue中splice方法总结

    2024-04-06 08:58:03       14 阅读
  6. RTOS Lab report:Task-List Management in the RTOS Kernel

    2024-04-06 08:58:03       14 阅读
  7. restful和soa区别是啥企业应用是使用RESTFUL还是SOA

    2024-04-06 08:58:03       14 阅读
  8. elementUI2

    2024-04-06 08:58:03       16 阅读
  9. 问题大全——Linux进程、IO及网络编程(自用)

    2024-04-06 08:58:03       14 阅读
  10. 久菜盒子|留学|推荐信|综合

    2024-04-06 08:58:03       15 阅读
  11. 基于JAX的二阶优化方法的实践

    2024-04-06 08:58:03       13 阅读