重学JavaScript-1

2021-05-10  本文已影响0人  Gambler_194b

var let const 的比较
var 关键字的作用于是函数作用域,有申明提升
example:

// 申明提升
function test() {    
  console.log(name);   
  var name= 'wang'; 
} 
test();  // undefined

// 函数作用域
function test() {    
  var message = "heihei"; 
} 
test(); 
console.log(message);   // ReferenceError: message is not defined

// 可以定义相同的变量
var  age = 18
var  age = 20
console.log(age)  // 20

let 关键字是块级作用域,没有申明提升,不能定义相同的变量
example

if (true) {   
  var age= 18;   
  console.log(age);   // 18
} 
console.log(age);   // 18      块作用域是函数作用域的子集,所以这里可以打印出18

if (true) {   
  let age = 18;   
  console.log(age);   // 18
} 
console.log(age);     // ReferenceError: age is not defined      在 if 块级外面,会报未定义

let age = 30; 
console.log(age);    // 30 
if (true) {   
  let age = 26;   
  console.log(age);  // 26 
}   
// 这里不会报错,因为JavaScript引擎会记录用于变量声明的标识符及其所在的块作用域,因此嵌套使用相同的标识符不会报错,而这是因为同一个块中没有重复声明

const 的用法与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改const声明的变量会报错。
注意:
const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制。

const person = {}; 
person.name = 'wang';   // 会修改成功
上一篇 下一篇

猜你喜欢

热点阅读