JavaScript学习记录
var和let和const的区别与用法
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; // 不允许 }
浙公网安备 33010602011771号