zoukankan      html  css  js  c++  java
  • let申明与const申明

    ES6新增了let命令,用来声明变时量。

    它的用法类似于var 但是所声明的变量,只在let命令所在的代码块内有效。

    //

    for(let i = 0; i<10 ;i++ ){

    console.log(i);//可以输出,此时的i是向它的父级作用域查询的到的。

    }

    console.log(i);//RefernceError: i is not defined;

    //

    //

    for(let i = 0;i<3;i++){

    // let i = "abc"; 

    let i= "as";//又声明了一个let类型的i;

    // var i = 0; //此时就会报错 因为var申明会提升。实际上执行顺序为下列代码。

    console.log(i);

    }

    //

    //

    for(let i = 0; i<3 ; i++){

    var i;//我们这里又声明了一个变量为i的申明;在es6里我们规定不允许重复申明一个变量。

    i = "as";

    console.log(i);

    }

    //

    //

    var tmp = new Date();

    function f(){

    console.log(tmp);

    if(false){

    let tmp = "hello world";//由于let没有申明提前

    }

    }

    f();//所以我们得到var申明的tmp;

    //

    var tmp = new Date();

    function f(){

    console.log(tmp);

    if(false){

    var tmp = "hello world";//由于var有申明提前

    }

    }

    f();// 所以我们得到的是一个undefined;

    //实际上运行的函数应该是这个样子的。

    var tmp = new Date();

    function f(){

    var tmp; //undefined;

    console.log(tmp);

    if(false){

    tmp = "hello world";//由于var有申明提前

    }

    }

    f();// 所以我们得到的是一个undefined;

    //

    由于let方法的特殊性,所以我们会产生如下介绍的几个特殊的属性;

    function bar( x = y; y = 2){

    return [x,y];

    }

    bar();//报错

    //产生的原因就是我们产生了死区;调用bar()时,我们的参数x默认值等于另外一个参数y,而y此时还没有被申明,属于“死区”。如果我们把上面参数的位置调换一个下就不会报错,因为x是申明的。

    function bar(x = 2; y = x){

    return [x,y]

    }

    bar();//[2,2]

    //

    var x = x;//不会报错,因为提前声明。

    let x = x;//报错,因为let不会提前声明。、

    个人认为let使用的好处:

    1 可以减少很多运行的错误。

    2 比较对内存友好,省出来很多空间,即用即毁。

    3 由于块级作用域,使代码更加明确增加可读性。减少很多不必要的麻烦。

    如果有更多好处,留言版主。让更多萌新看到。

    const 用来声明一个可读的常量。一旦申明就不能改变。

    申明的常量是被保存在栈中的。

    所以在实际上我们有时候可以通过操作堆来修改这个常量的值。但是我们一般不去这么做。

    比如:

    const arr = [1,2,2,3];

    arr.push(5);

    console.log(arr);//[1, 2, 2, 3, 5]

    //

    const命令申明的常量不提升的,同样存在暂时性死区,只能在申明的位置后面去使用。

    var message = "Hello!";

    let age = 25;

    // 以下两行都会报错

    const message = "Goodbye!";

    const age = 30;

    const 声明的常量,也与 let 一样不能够重复申明。

    本质

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

    ES6 声明变量的六种方法

    ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法

    ES6新增了let命令,用来声明变时量。它的用法类似于var 但是所声明的变量,只在let命令所在的代码块内有效。//for(let i = 0; i<10 ;i++ ){console.log(i);//可以输出,此时的i是向它的父级作用域查询的到的。}console.log(i);//RefernceError: i is not defined;////for(let i = 0;i<3;i++){// let i = "abc"; let i= "as";//又声明了一个let类型的i;// var i = 0; //此时就会报错 因为var申明会提升。实际上执行顺序为下列代码。console.log(i);}////for(let i = 0; i<3 ; i++){var i;//我们这里又声明了一个变量为i的申明;在es6里我们规定不允许重复申明一个变量。i = "as";console.log(i);}////var tmp = new Date();function f(){console.log(tmp);if(false){let tmp = "hello world";//由于let没有申明提前}}f();//所以我们得到var申明的tmp;//var tmp = new Date();function f(){console.log(tmp);if(false){var tmp = "hello world";//由于var有申明提前}}f();// 所以我们得到的是一个undefined;//实际上运行的函数应该是这个样子的。
    var tmp = new Date();function f(){var tmp; //undefined;console.log(tmp);if(false){tmp = "hello world";//由于var有申明提前}}f();// 所以我们得到的是一个undefined;//
    由于let方法的特殊性,所以我们会产生如下介绍的几个特殊的属性;function bar( x = y; y = 2){return [x,y];}bar();//报错//产生的原因就是我们产生了死区;调用bar()时,我们的参数x默认值等于另外一个参数y,而y此时还没有被申明,属于“死区”。如果我们把上面参数的位置调换一个下就不会报错,因为x是申明的。function bar(x = 2; y = x){return [x,y]}bar();//[2,2]//var x = x;//不会报错,因为提前声明。let x = x;//报错,因为let不会提前声明。、
    个人认为let使用的好处: 1 可以减少很多运行的错误。 2 比较对内存友好,省出来很多空间,即用即毁。 3 由于块级作用域,使代码更加明确增加可读性。减少很多不必要的麻烦。 如果有更多好处,留言版主。让更多萌新看到。
    const 用来声明一个可读的常量。一旦申明就不能改变。 申明的常量是被保存在栈中的。 所以在实际上我们有时候可以通过操作堆来修改这个常量的值。但是我们一般不去这么做。 比如: const arr = [1,2,2,3]; arr.push(5); console.log(arr);//[1, 2, 2, 3, 5] // const命令申明的常量不提升的,同样存在暂时性死区,只能在申明的位置后面去使用。 var message = "Hello!";let age = 25;
    // 以下两行都会报错const message = "Goodbye!";const age = 30;const 声明的常量,也与 let 一样不能够重复申明。
    本质const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。ES6 声明变量的六种方法ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法

  • 相关阅读:
    C#.NET常见问题(FAQ)-浮点数如何四舍五入
    C#.NET常见问题(FAQ)-方法参数带ref是什么意思
    C#.NET常见问题(FAQ)-list比数组效率低多少
    C#.NET常见问题(FAQ)-如何输出带选项的MessageBox,YESNO
    微软企业库Unity学习笔记
    微软企业库5.0---缓存模块
    学习微软企业库--日志模块
    学习微软企业库存心得--总结
    C#获取网页内容,并且处理正确编码
    C#获取网页内容的三种方式
  • 原文地址:https://www.cnblogs.com/l8l8/p/8831546.html
Copyright © 2011-2022 走看看