在js中可以声明变量的关键字有
var
、let
、const
。
前言
浅浅的了解下var、let、const声明
一、var 变量
使用var
定义变量,可以保存任何类型的值。若不初始化变量,变量会保存undefined
。
声明变量:
var 变量名=值;
var 变量名;
//使用var声明变量
var name ='名字';
console.log(name);//名字
// 声明变量 不赋值 可以的但不提倡
a = 1
console.log(a) // 1
1.var在函数作用域中不同声明
变量a
在函数内部使用var
定义,调用函数fun
,并给这个变量赋值,这时它就是局部变量,在函数执行结束后,变量就会被销毁,所以最后一行代码会报错,显示变量a
未被定义。
function fun() {
// 局部变量
var a = "hi";
console.log(a);//hi
}
fun();
console.log(a); //报错 ReferenceError: a is not defined
若在函数内部,不使用var
,直接赋值,那这时就是全局变量,可以在函数外部访问到。
function fun() {
// 全局变量
a = "hi";
console.log(a);//hi
}
fun();
console.log(a); // hi
2.重复声明
使用var
重复声明同一个变量也是可以的:
function fun() {
var a = 1;
var a = 2;
var a = 3;
console.log(a);
}
fun(); // 3
也可以一次性声明多个变量,一次性打印多个变量,需要使用用逗号“,”隔开
// 一次性声明多个变量
//用,隔开
var num1 = 12, num2 = 23, num3 = 24;
// 一次性打印多个变量
console.log(num1, num2, num3);//12 23 24
二、let 变量
let关键字用来声明变量,类似于var,但有很大的区别。
1.存在块级作用域 就是花括号{}
// 凡是有 {} 的地方都是块级作用域
// 比如for(){} function(){}
if (true) {
let num = 10;
var num1 = 20
} else {
let str3 = '今天周几?'
}
console.log(num);//报错 caught ReferenceError: num is not defined
console.log(num1);//20
2.不能重复声明,同一个作用域内只能声明一次
如果混用var
和let
声明变量,也是不允许的,也是会报错的!
//正常声明
let str = "今天周几?";
//console.log(str);//今天周几?
// 重复声明,报错
let str = '周二'; //报错 caught SyntaxError: Identifier 'str' has already been declared
3.不存在变量提升,存在暂时性死区,预编译时不允许访问.
// 不存在变量提升
// 暂时性死区,预编译过程,就是变量声明到变量赋值之前
// 不允许访问,访问没有意义...
console.log(str); // Uncaught ReferenceError: Cannot access 'str' before initialization
let str = "hello";
三、const 常量声明
常量声明之后不允许被修改
// 常量: 声明之后不允许被修改
const weeks = "今天周几?";
console.log(weeks); //今天周几?
// 修改
weeks = "今天星期几?"; //报错 caught TypeError: Assignment to constant variable.
console.log(weeks);
常量不允许被修改的是地址,而不是值
基本数据类型,要重新赋值,就需要把原来的释放掉,再给新的地址
复合数据类型,对象,只修改属性,不会影响对象在堆中存储的位置
// 声明常量对象
const obj = {
name: "星期",
age: 1,
};
// 修改属性
obj.age = 2;
console.log(obj); //{name: '星期', age: 2}
// 重新赋值,声明了新的对象,要修改地址
obj = {
name: "小辣椒",
age: 3,
};
console.log(obj); //caught TypeError: Assignment to constant variable.
常量也是存在块级作用域的
// 常量也是存在块级作用域
{
const str = '周几了?周几了?周几了?'
}
console.log(str); //报错 Uncaught ReferenceError: str is not defined
总结
没有啦!先了解到这里吧....