JavaScript函数中let和var使用的注意点

本文通过一个具体的函数柯理化的实例,探讨了JavaScript中let与var声明变量的不同之处,特别是它们在函数作用域内的表现差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在学习函数柯理化的时候发现了一个问题,具体代码如下:

 function createCurry(func, args) {
        //length 是函数的参数长度
        var argity = func.length;
        var args = args || [];  //为啥这里用let定义会显示 args重复 呢
        //返回的是这个函数,此时还未执行此函数,只是建立好了闭包
        return function () {
            //arguments是类数组的形式
            var _args = [].slice.apply(arguments); //转换为数组并取值
            args.push(..._args);
            if (args.length < argity) { //不大于参数长度就继续调用
                return createCurry.call(this, func, args);
            }
            return func.apply(this, args);
        }

    }

        在这段代码中,var args = args || []; 这一行如果换成let args = args || [] ; 就会显示变量重复定义。

        一开始我思考的方向是变量作用域和函数参数的特点。

        最后查看了ES6标准的let 和var 的区别,let是块级变量声明关键字,它不支持重复定义。而var是支持重复定义的。

例子:

看var例子:这里在window全局环境下,var 明显可以重复定义,且能够引用之前的值。

看let例子:显示变量重复定义,说明,在当前块下,let无法声明已经存在的变量名。

 在函数中

        在函数中形参占用了变量名,因此使用var覆盖变量可行,但是使用let就会报变量重复定义的错误。

总结

        这个问题其实非常简单,在思考的过程中把问题复杂化了。在这里提醒自己一下,希望以后解决bug能够找到问题关键所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值