14 Star 81 Fork 23

北京大学-张齐勋 / 移动端开发入门实践

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ES6_变量与常量.md 3.10 KB
一键复制 编辑 原始数据 按行查看 历史
张齐勋 提交于 2021-02-25 09:25 . update

var定义变量

在Javascripit中,经典的定义变量的关键字是var,但是var的问题比较多,因此在ES6推出了let关键字来定义变量。

function abc(){
    var a = 1;
    {
        var a = 2;
        console.log(a);
    }
    console.log(a);
}
abc();

输出是什么?

function abc(){
    let a = 1;
    {
        let a = 2;
        console.log(a);
    }
    console.log(a);
}
abc();

输出是什么?

let定义变量

  • let定义的变量,是一个块级作用域的变量,该变量只在块内有效。
  • 程序1
console.log(var_a);
{
    var var_a = 100;
}

程序1执行结果如下:

$ node let.js 
undefined
  • 程序2
{
    console.log(var_a);
    var var_a = 100;
}

程序2执行结果如下:

$ node let.js 
undefined
  • 程序3
console.log(var_a);
console.log(let_a);
{
    var var_a = 100;
    let let_a = 200;
}

程序3执行结果如下:

$ node let.js 
undefined
/Users/zhangqixun/temp/let.js:2
console.log(let_a);
            ^

ReferenceError: let_a is not defined
  • 程序4
{
    console.log(var_a);
    console.log(let_a);
    var var_a = 100;
    let let_a = 200;
}

程序4执行结果如下:

node let.js 
undefined
/Users/zhangqixun/temp/let.js:3
    console.log(let_a);
                ^

ReferenceError: Cannot access 'let_a' before initialization
  • 程序5
{
    var_a = 300;
    console.log(var_a);
    let_a = 400;
    console.log(let_a);
    var var_a = 100;
    let let_a = 200;
}

程序5执行结果如下:

$ node let.js 
300
/Users/zhangqixun/temp/let.js:4
    let_a = 400;
          ^

ReferenceError: Cannot access 'let_a' before initialization

程序6

{
    var var_a = 100;
    let let_a = 200;
    console.log(var_a);
    console.log(let_a);
}

程序6执行结果如下:

$ node let.js 
100
200

程序7

{
    var var_a = 100;
    let let_a = 200;
}
console.log(var_a);
console.log(let_a);

程序7执行结果如下:

$ node let.js 
100
/Users/zhangqixun/temp/let.js:6
console.log(let_a);

const定义常量

  • const 声明一个只读的常量,一旦声明,常量的值就不能改变。
  • const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。
  • 对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。
  • 对于复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了。
const MY_OBJ = {key: 'abc'};
MY_OBJ.key = '123';
console.log(MY_OBJ);

注意

  • ES6以上版本开发的项目,请放弃var,使用let来定义变量
  • ES6明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。
JavaScript
1
https://gitee.com/ss-pku/webdev.git
git@gitee.com:ss-pku/webdev.git
ss-pku
webdev
移动端开发入门实践
master

搜索帮助