一、var关键字
- var定义的变量可以修改的
var a=1;
console.log('函数外var定义a:',a)//可以输出a=1
a=4;
console.log(a)//输出4
2.var声明的变量是函数作用域
(1)在函数内部使用var操作符定义局部变量,在调用之后变量会销毁,在函数外部不能访问
例:
function test(){
var message='hi';//局部变量
}
test();
console.log(message);//报错
报错内容:
(2)在函数内部定义变量的时候省略var操作符,创建一个全局变量,调用这个函数,在函数外部就能访问到,函数内部也可以访问到全局作用域中的变量
注意:
var num='111'
function test(){
message='hi';//局部变量
console.log(message)//hi
console.log(num)//111 函数内部可以访问全局作用域中的变量num
}
test();
console.log(message);//输出hi
3.var声明变量存在变量提升
(1)代码不会报错,使用这个关键字声明的变量会自动提升到函数作用于顶端
function foo(){
console.log(a)
var a=2;
}
foo()//undefined
function foo(){
var a
console.log(a)
a=26;
}
foo()//undefined
(2)let和const不存在变量提升
console.log(s); //报错
let s=10
报错内容:
console.log(s); //报错
const s=10
报错内容:
4.var可以定义多个变量,在一条语句中用逗号隔开每个变量
var a=10,
b=11,
v=12
5.同一作用域下,var可以重复声明相同的变量
var a=5;
var a=10;//5
6.var的变量会挂载到window上
var a=1 //window.a
console.log(a)//1
console.log(window.a)//1
二、let声明变量
1.使用let声明的变量具有块级作用域的特点
块级作用域由最近的一对花括号{}界定换句话说,if块、while块、、function块,甚至连单独的块也是let声明的变量的作用域。在变量的作用域之外,无法访问变量,会报错
{
let num='36';
console.log(num);//36
}
console.log(num);//报错
报错内容:
if(true){
let num=12;
console.log(num);//12
}
console.log(num);//报错
报错内容:
while(true){
let num=12;
}
console.log(num);//报错:ReferenceError
function(true){
let num=12;
}
console.log(num);//报错:ReferenceError
报错内容:
2、同一作用域下不能使用let重复声明相同的变量
(1)同一作用域下不能使用let重复声明
let num=66;
let num=77;
console.log(num)//报错
报错内容:
(2)不同作用域下,let可以声明相同的变量名的变量
let num=66;
function fun(){
let num=65;
{
let num=63;
console.log(num)//63
}
console.log(num)//65
}
console.log(num)//66
(3)相同作用域下不能重复声明并不受var关键字的限制
var a=66;
var a=45;
let a=22;//报错
报错内容:
3.let的变量不会挂载到window上
let a=1 //window.a
console.log(a)//1
console.log(window.a)//undefined
4.let存在暂时性死区
var name='ll'
function fn(){
console.log(name)
let name=14
}
fn()
报错内容:
三、使用const声明常量
1、const声明常量必须赋初始值
const a=14;//有效
cosnt b;//报错
报错内容:
2、const声明的常量不能更改,如果声明的是复合数据类型,可以修改其属性
const a=5;
a=10;//报错 不能更改
const arr=[]
arr=[1,2]//报错 改变了内存指针的指向
arr.push(1);//[1] 知识修改指针指向的内存地址里的属性
报错内容:
3、const也存在块级作用域
{
const num='36';
console.log(num);//36
}
console.log(num);//报错
报错内容:
4、let和var声明的变量,const不能重复声明
var a=4;
let b=5;
const a=8;//报错
const b=7;//报错
报错内容:
5.const的变量不会挂载到window上
const a=1 //window.a
console.log(a)//1
console.log(window.a)//undefined
6.const存在暂时性死区
var name='ll'
function fn(){
console.log(name)
const name=14
}
fn()
报错内容: