JavaScript中var、let、const的区别

180 阅读1分钟

在JS中有三种声明变量的方式:var、let、const。 JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。

1、var定义的变量可以修改,可以重复定义,如果不初始化会输出undefined(预解析),不会报错

var num = 1;
// var num;//不会报错
console.log('在函数外var定义num变量:' + num);//输出num=1
function handle() {
    num = 2;
    console.log('在函数内部定义变量num:' + num);//输出num=2
}
handle();
console.log('函数调用后var定义num为函数内部修改值:' + num);//输出num=2

2、let声明一个变量,必须先声明定义再使用,否则会报错,let定义的变量具有块级作用域,函数内部使用let定义后,对函数外部无影响。不可重复定义同一个变量,不存在变量预解析

let number = 1;
console.log('函数外let定义number:' + number);//输出number=1
function handle(){
    let number = 2;
    console.log('函数内let定义number:' + number);//输出number=2
} 
handle();
console.log('函数调用后let定义number不受函数内部定义影响:' + number);//输出number=1

3、const用于声明常量,也具有块级作用域 ,const定义的常量不可以修改,而且必须初始化,但是对引用类型的值可更改

const name = '张三';//正确
// const name;//错误,必须初始化
console.log('函数外const定义name:' + name);//输出name='张三'
// name = '李四';
// console.log('函数外修改const定义name:' + name);//无法输出

const hobby = ['吃饭','睡觉'];
// hobby = ['打篮球','睡觉']; //错误
hobby[0] = '打篮球' //正确