JavaScript学习记录

var和letconst的区别与用法

1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象,可以修改,如果不初始化会输出undefined,不会报错,在程序中的任何位置都允许重新声明 JavaScript var 变量

var  x = 10;
// 这里x为10
{  
  var x = 2;
  // 这里x为2
}
// 这里x为 2
var a = 1;
// var a;//不会报错
console.log('函数外var定义a:' + a);//可以输出a=1
function change(){
a = 4;
console.log('函数内var定义a:' + a);//可以输出a=4
}
change();
console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

2.let是块级作用域,使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;函数内部使用let定义后,对函数外部无影响

let c = 3;
console.log('函数外let定义c:' + c);//输出c=3
function change(){
let c = 6;
console.log('函数内let定义c:' + c);//输出c=6
}
change();
console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
{ 
  let x = 10;
}
// 此处不可以使用 x

3.使用const声明的是常量,在后面出现的代码中不能再修改该常量的值,而且在定义时必须初始化

const a=1;//正确
const b;//错误,必须进行初始化
a=2;//错误,不允许修改

4.其他情况

在相同的作用域,或在相同的块中,通过 let 重新声明一个 var 变量是不允许的:

var x = 10;       // 允许
let x = 6;       // 不允许

{
  var x = 10;   // 允许
  let x = 6;   // 不允许
}

在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的:

let x = 10;       // 允许
let x = 6;       // 不允许

{
  let x = 10;   // 允许
  let x = 6;   // 不允许
}

在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的:

let x = 10;       // 允许
var x = 6;       // 不允许

{
  let x = 10;   // 允许
  var x = 6;   // 不允许
}

在不同的作用域或块中,通过 let 重新声明变量是允许的:

let x = 6;       // 允许

{
  let x = 7;   // 允许
}

{
  let x = 8;   // 允许
}

 在块作用域内使用 const 声明的变量与 let 变量相似。

var x = 10;
// 此处,x 为 10
{ 
  const x = 6;
  // 此处,x 为 6
}
// 此处,x 为 10

您可以更改常量const对象的属性,但是您无法重新为常量对象赋值:

// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};

// 您可以更改属性:
car.color = "White";

// 您可以添加属性:
car.owner = "Bill";
car = {type:"Volvo", model:"XC60", color:"White"};    // 错误,你不可以直接赋值

同样您可以更改const常量数组的元素,但是您无法重新为常量数组赋值:

// 您可以创建常量数组:
const cars = ["Audi", "BMW", "porsche"];

// 您可以更改元素:
cars[0] = "Honda";

// 您可以添加元素:
cars.push("Volvo");
cars = ["Honda", "Toyota", "Volvo"];    // ERROR

 在同一作用域或块中,不允许将已有的 var 或 let 变量重新声明或重新赋值给 const:

var x = 2;         // 允许
const x = 2;       // 不允许
{
  let x = 2;     // 允许
  const x = 2;   // 不允许
}

在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的,在另外的作用域或块中重新声明 const 是允许的

const x = 2;       // 允许
const x = 3;       // 不允许
x = 3;             // 不允许
var x = 3;         // 不允许
let x = 3;         // 不允许

{
  const x = 2;   // 允许
  const x = 3;   // 不允许
  x = 3;         // 不允许
  var x = 3;     // 不允许
  let x = 3;     // 不允许
}

 

posted on 2021-05-13 09:10  没有颜色的糖  阅读(61)  评论(0)    收藏  举报

Live2D