js中var的重复声明

腾讯的一个笔试题,先看一下

var a = 100;
function fn() {
    alert(a);   //undefined
    var a = 200;
    alert(a);   //200
}
fn();
alert(a);   //100
var a;
alert(a);    //100
var a = 300;
alert(a);   //300

前两个很简单,不解释 了,涉及到声明提前的问题。

后面仨为啥呢,这要总结下重复声明的问题:
1.使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误.

2.如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色.

3.如果重复使用的一个声明没有一个初始值,那么它不会对原来存在的变量有任何的影响.

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: JavaScript ,`var` 和 `let` 都是用来声明变量的,但是它们有以下几点区别: 1. 作用域:`var` 声明的变量作用域是整个函数,而 `let` 声明的变量作用域是块级作用域。 2. 提升:`var` 会在整个函数的作用域内提升到作用域的顶部,而 `let` 不会。 3. 重复声明:`var` 允许重复声明同一个变量,而 `let` 不允许。 4. 循环的变量获取:`var` 在循环最后的值会取到最后一次的值,而 `let` 在循环每次都会获取到最新的值。 因此,建议在新的开发尽量使用 `let` 来声明变量,以保证变量的作用域和变量值的正确性。 ### 回答2: JavaScriptvar和let都是用来声明变量的关键字,但它们有一些不同之处。 1.作用域: 使用var声明的变量是函数作用域,而使用let声明的变量是块级作用域。函数作用域意味着变量只在声明它的函数内可见,而块级作用域意味着变量只在声明它的块(如if语句、for循环等)内可见。 例如,使用var声明的变量在if语句块外部也可以访问: ``` if (true) { var x = 5; } console.log(x); // 5 ``` 而使用let声明的变量在if语句块外部是不可见的: ``` if (true) { let y = 10; } console.log(y); // ReferenceError: y is not defined ``` 2.变量提升: 使用var声明的变量存在变量提升,意味着可以在声明之前访问变量。而使用let声明的变量没有变量提升,必须在声明之后才能访问变量。 例如,使用var声明的变量可以在声明之前访问: ``` console.log(x); // undefined var x = 5; ``` 而使用let声明的变量在声明之前访问则会抛出ReferenceError: ``` console.log(y); // ReferenceError: Cannot access 'y' before initialization let y = 10; ``` 3.重复声明: 使用var声明的变量可以被重复声明而不会报错,而使用let声明的变量在同一作用域内重复声明则会报错。 例如,使用var声明的变量可以被重复声明: ``` var x = 5; var x = 10; console.log(x); // 10 ``` 而使用let声明的变量重复声明会抛出SyntaxError: ``` let y = 10; let y = 20; // SyntaxError: Identifier 'y' has already been declared ``` 因此,var和let的主要区别在于作用域、变量提升以及重复声明时的行为。根据具体的需求和语境选择合适的关键字来声明变量。 ### 回答3: 在JavaScriptvar和let是用于声明变量的关键字,它们有以下的区别: 1. 作用域范围不同:var声明的变量具有函数作用域,意味着它们在整个函数内部都是可见的;而let声明的变量具有块级作用域,意味着它们只在声明的块内可见。 2. 变量提升不同:在函数作用域内,使用var声明的变量会提升到函数的顶部,即变量在声明之前就可以使用;而使用let声明的变量不存在变量提升,只能在声明之后使用。 3. 重复声明不同:在同一个作用域内,使用var重复声明同一个变量不会报错,而只会将新值赋给已存在的变量;而使用let重复声明同一个变量则会报错。 4. 块级作用域的循环变量:在使用for循环的时候,使用var声明的循环变量虽然在每次循环都会重新赋值,但是在循环结束后仍然可以访问到;而使用let声明的循环变量只在当前循环有效,循环结束后会销毁。 总结来说,var声明的变量具有函数作用域、变量提升和重复声明不报错的特点;而let声明的变量具有块级作用域、没有变量提升和不允许重复声明的特点。在实际开发,推荐使用let来声明变量,因为它更安全,能够避免一些潜在的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值