Javascript ES6 let 和 var 比较

本文探讨了JavaScript ES6中let与var关键词的区别,主要聚焦于二者在作用域方面的不同之处,通过具体示例说明了let关键词所声明的变量只在最近的块作用域内有效,而var则在整个函数作用域内都可见。

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

                                                                                       JavaScript ES6 的 let 和 var 的比较

    在JavaScript 1.7中, let 关键词被添加进来, 我听说它声明之后类似于”本地变量“, 但是我仍然不确定它和 关键词 var 的具体区别。

    回答:

    不同点在于作用域, var关键词的作用域是最近的函数作用域(如果在函数体的外部就是全局作用域), let 关键词的作用域是最接近的块作用域(如果在任何块意外就是全局作用域),这将会比函数作用域更小。

    同样, 像var 一样, 使用let 声明的变量也会在其被声明的地方之前可见。 


下面是Demo 例子。

全局(Global)

当在函数体之外它们是平等的。

let me = 'go'; //globally scoped
var i = 'able'; //globally scoped

函数(Function)

当瞎下面这种, 也是平等的。 

function ingWithinEstablishedParameters() {
    let terOfRecommendation = 'awesome worker!'; //function block scoped
    var sityCheerleading = 'go!'; //function block scoped
};

块(Block)

这是不同点, let 只是在 for 循环中, var  却是在整个函数都是可见的。 

function allyIlliterate() {
    //tuce is *not* visible out here

    for( let tuce = 0; tuce < 5; tuce++ ) {
        //tuce is only visible in here (and in the for() parentheses)
    };

    //tuce is *not* visible out here
};

function byE40() {
    //nish *is* visible out here

    for( var nish = 0; nish < 5; nish++ ) {
        //nish is visible to the whole function
    };

    //nish *is* visible out here
};
文章出处:  Javascript - “let” keyword vs “var” keyword


### 变量作用域 `var` 关键字声明的变量具有函数作用域或全局作用域,这意味着如果在函数内部没有使用 `var` 声明变量,则会创建一个全局变量。而 `let` `const` 都具有块级作用域,这使得它们更适合于循环条件语句中的变量声明,因为它们不会泄露到外部作用域[^1]。 ```javascript if (true) { var x = 5; let y = 6; } console.log(x); // 5 console.log(y); // ReferenceError: y is not defined ``` ### 变量提升 使用 `var` 声明的变量会被提升到其作用域的顶部,并且初始化为 `undefined`。相比之下,`let` `const` 虽然也会被提升,但不会被初始化,因此访问这些变量会导致引用错误,直到它们被实际执行流中的声明所覆盖(暂时性死区)[^3]。 ```javascript console.log(a); // undefined var a = 10; console.log(b); // ReferenceError let b = 20; ``` ### 重复声明 `var` 允许在同一作用域内重复声明同一个变量,而 `let` `const` 则不允许这样做。尝试这样做会导致语法错误。 ```javascript var c = 1; var c = 2; // 合法 let d = 3; let d = 4; // SyntaxError: Identifier 'd' has already been declared ``` ### 不可变性 `const` 声明的变量必须立即初始化,并且一旦赋值后就不能更改其绑定的对象。然而,如果是对象或数组,虽然不能改变引用本身,但是可以修改对象属性或数组的内容[^4]。 ```javascript const e = { name: "Alice" }; e.name = "Bob"; // 合法 e = { name: "Charlie" }; // TypeError: Assignment to constant variable. ``` ### 使用建议 由于 `let` `const` 提供了更好的作用域控制避免了一些常见的编程陷阱,如变量提升带来的问题,因此推荐优先使用 `const`,只有当需要重新赋值时才使用 `let`。不再推荐使用 `var` 来声明变量[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值