let和const

nodejs是javascript的运行环境,可以使用node来测试。

1.定义(声明)变量

es5和es6的区别:

js版本 作用域
es5 全局作用域和函数作用域
es6 块级作用域
定义(声明)变量 定义的变量是否提升 在同一个作用域内,是否可以重复定义 变量定义后,是否可以修改
var
let
const 否 除外 object array修改

1. 作用域

//常见的块级作用域
if(){}

for(){}

while(){}

  • es5 --->for
//例1
if (true) {
    var a = 20;
}

console.log(a)

//例2
for(var i=0;i<10;i++){
    //var定义的i是全局变量
}

console.log(i)  //10

//例3

var arr = [];

for (var i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}

arr[1]() //10
arr[2]() //10
  • es6 ---> for
//例1
if (true) {
    let a = 20;
}
console.log(a) //a is not defined

//例2
for(let i = 0;i<10;i++){
    //let定义的i是局部的变量
}

console.log(i)  //i is not defined

//例3

let arr = [];

for (let i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}
arr[1]() //1
arr[2]() //2

2. 是否有变量提升

  • es5 ---> var有变量提升
var a = 20;
function fn(){
    alert(a)    //undefined
    var a = 5;  
}
fn()

//相当于下面代码

function fn(){
    var a;      //变量提升
    alert(a)
    a = 5;
}

  • es6 ---> let没有变量提升
let a = 20;
function fn(){
    alert(a);   //a is not defined
    let a = 5;
}

3.是否可以重复定义

  • es5 ---> 在同一作用域内,var可以重复定义
var a = 10;

//....

var a = 5;
console.log(a); //5
  • es6 ---> 在同一作用域内,let不可以重复定义
//例1
let a = 10;

//.....
let a = 5;
console.log(a);
//Uncaught SyntaxError: Identifier 'a' has already been declared

//例2

{
    let a = 10; 
    {
        let a = 5;
        console.log(a)
    }
    console.log(a)
}

//例3

for (let a = 1; a < 10; a++) { //父级作用域
    let a = 'abc'; //子级作用域
    console.log(a);
}

注let:
  • let没有变量提升,即在代码块内,只要在let定义之前使用变量就会报错。
  • 在同一个作用域内,不能重复定义变量
  • let声明的变量不能成为window的属性
  • 暂时性死区

3.const定义常量

const注:const在定义时必须有值,不能后赋值(修改),经常用于定义配置文件

const arr = ['apple', 'banner'];

// arr = false;
// console.log(arr) //Uncaught TypeError: Assignment to constant variable.

arr.push("orange"); //const定义的对象可以修改,因为对象是引用类型的。

console.log(arr);

基本类型存储在栈内存中


image

<h6>引用类型同时存储在堆内存和栈内存中</h6>


image

例:

image
总结:
  • 定义变量使用let,不要使用var
  • const在定义时必须有值,不能后赋值(修改),经常用于定义配置文件。例如:node引用的包,可以使用const
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容