Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS:let,const,var的区别? #7

Open
chenfan0 opened this issue May 30, 2022 · 0 comments
Open

JS:let,const,var的区别? #7

chenfan0 opened this issue May 30, 2022 · 0 comments
Labels
JS javascript

Comments

@chenfan0
Copy link
Member

let和var的区别:

  • let具有块级作用域,而var没有。
// 打印5个5
for (var i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i) 
  }, i * 100);
}
// 打印0,1,2,3,4
for (let i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i)
  }, i * 100);
}
  • var声明的变量存在变量提升,let声明的变量只能在声明之后使用。
console.log(a) // undefined
var a = 100


console.log(b) // 报错 ReferenceError: Cannot access 'b' before initialization
let b = 100  
  • var声明的变量会被挂在全局对象上上,而let声明的变量不会。
var a = 100
console.log(window.a)  // 100
let b = 100
console.log(window.b) // undefined 
  • var声明变量时可以重复声明,而let声明的变量则不允许重复声明
var a
var a = 100
let b
let b = 100 // 报错 SyntaxError: Identifier 'b' has already been declared
  • let存在暂时性死区,var不存在。(暂时性死区:在声明变量之前,该变量都是不可访问的)
let a = 100

if (true) {
  // 因为在该if块级作用域内,存在a的声明。所以在该作用域内,声明a之前都是访问不了a的。
  console.log(a) // 报错 ReferenceError: Cannot access 'a' before initialization
  let a = 200
}

let和const的区别:

  • let声明的变量可以被重新赋值,而const声明的变量不能被重新赋值。(注意:const声明的变量是不能被重新赋值,但是如果const声明的变量赋值为一个对象,那么是可以对这个对象的属性进行增删改查,但是不能重新赋值,也就是指针不能变)
let a = 100
a = 200

const b = 100
b = 200 // TypeError: Assignment to constant variable.

const c = {
  name: 'aaa',
  age: 18
}

c.name = 'bbb'
c.id = 123
c = {} // TypeError: Assignment to constant variable.
  • let声明变量时可以不设置初始值,而const声明变量时必须同时设置初始值。
let a
const b  // SyntaxError: Missing initializer in const declaration 
@chenfan0 chenfan0 added today 每日一题。 JS javascript and removed today 每日一题。 labels May 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JS javascript
Development

No branches or pull requests

1 participant