var、let和const介绍

var、let和const介绍,第1张

let、var和const 先导知识 let和const是ES6新增的两个Javascript关键字。块级作用域(Block Scope):ES6引入,具体为代码块{}内有效,在{}之外不能被访问。变量提升:使用var定义的变量可以在声明之前使用。全局变量:在函数外声明的变量,在程序的任何地方都可以访问。局部变量:在函数内声明的变量,只能在该函数内被访问。作用域:全局、局部和块级作用域。 var

使用var在块{}中声明变量会重新声明块外的同名变量。

var x = 1;
{
    var x = 2;
}
console.log(x);//此处的x为2

在for循环中使用var定义变量,会导致其他位置同名变量值的改变。

var x = 1;
for(var x = 0;x < 5; x++){
}
console.log(x);//此处的x为5

使用var在函数外声明变量,该变量为全局变量;使用var在函数内声明变量,该变量为局部变量。

var x = 1;//全局变量
function En(){
    var x = 3;//局部变量
}
En();//执行函数
console.log(x);//此处的x为1,函数内的代码在函数执行时创建,在函数结束执行时自动销毁。

var关键字声明的全局作用域变量对于HTML来说是属于window对象。

var name = "En";
console.log(window.name);//可以使用window.name访问,相当于var定义的全局作用域变量是HTML的window对象的属性。

var在相同或不同作用域都可以重新声明赋值。

var x = 1;
var x = 2;
console.log(x);//x=2
{
    var x = 3;
}
console.log(x);//x=3

相同的作用域中,var不能重新声明被let声明过的变量。

let x = 1;
var x = 2;//Uncaught SyntaxError: Identifier 'x' has already been declared

{
    let y = 3;
    var y = 4;//Uncaught SyntaxError: Identifier 'y' has already been declared
}

使用var声明的变量可以在声明之前使用。

x = 3;
console.log(x); //x=3
var x;
let

let声明的代码只能在它所在的代码块有效,即let声明的变量具有块作用域的特性。

var x = 1;
{
    let x = 3;
}
console.log(x);//此处的x为1

在for循环中使用let定义变量,不会导致其他位置同名变量值的改变。

var x = 1;
for(let x = 0;x < 5; x++){
}
console.log(x);//此处的x为1

使用let在函数外声明变量,该变量为全局变量;使用let在函数内声明变量,该变量为局部变量。

let x = 1;//全局变量
function En(){
    let x = 2;//局部变量
}
console.log(x);//此处的x为1

在相同作用域中,let不能重新声明被var或let声明过的变量。

var x = 1;
let x = 2;//Uncaught SyntaxError: Identifier 'x' has already been declared
{
    var i = 3;
    let i = 4;//Uncaught SyntaxError: Identifier 'i' has already been declared
}

let y = 5;
let y = 6;//Uncaught SyntaxError: Identifier 'y' has already been declared
{
    let j = 7;
    let j = 8;//Uncaught SyntaxError: Identifier 'j' has already been declared
}

在不同作用域中,let可以重新声明被var或let声明过的变量。

var x = 1;
{
    let x = 2;
}
console.log(x);//x=1

let y = 3;
{
    let y = 4;
}
console.log(y);//y=3
const

const用于声明常量,声明时必须初始化,初始化之后的值不可修改。

const x = 1;
x = 3;//Uncaught TypeError: Assignment to constant variable.
x = 3 + x;//Uncaught TypeError: Assignment to constant variable.
const y;//Uncaught SyntaxError: Missing initializer in const declaration

const定义的变量具有块级作用域的性质。

const x = 1;
{
    const x = 2;
}
console.log(x);//x=1

const定义的“常量”并非真正的常量。

const cat = {name:"Lucy", age:"2", gender:"girl"};
//可以修改对象内的属性
cat.name = "Marry";
//可以添加属性
cat.color = "blue";
console.log(cat);//{name: 'Marry', age: '2', gender: 'girl', color: 'blue'}
//不可以重新赋值对象
cat = {name:"Jury", age:"3", gender:"girl"};//Uncaught TypeError: Assignment to constant variable.

const color = ["pink", "blue", "yellow"];
//可以修改数组内的值
color[0] = "purple";
//可以往数组内添加新值
color.push("red");
console.log(color);//['purple', 'blue', 'yellow', 'red']
//不可以重新赋值数组
color = [];//Uncaught TypeError: Assignment to constant variable.
总结 let和const都声明的变量具有块作用域的性质。在相同作用域,let和const所声明的值无法被重新声明。 拓展

使用const声明对象,可以 *** 作对象内的属性;使用const声明数组,可以 *** 作数组内的值。什么时候不可 *** 作呢?

const cat = {name:"Lucy", age:"2"};
Object.freeze(cat);
cat.name = "Marry";
console.log(cat);//{name: 'Lucy', age: '2'}
//使用freeze对对象进行冻结,不能再对其进行 *** 作(增删改查)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1320355.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-11
下一篇2022-06-11

发表评论

登录后才能评论

评论列表(0条)

    保存