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 种声明变量的方法

  • 相关阅读:
    To select the file to upload we can use the standard HTML input control of type
    Cascading Menu Script using Javascript Explained
    网站首页head区代码规范
    轻松掌握 Java 泛型
    JDK 5.0 中的泛型类型学习
    如何在firefox下获取下列框选中option的text
    是同步方法还是 synchronized 代码? 详解多线程同步规则
    javascript select option对象总结
    Select的动态取值(Text,value),添加,删除。兼容IE,FireFox
    javascript在ie和firefox下的一些差异
  • 原文地址:https://www.cnblogs.com/l8l8/p/8831546.html
Copyright © 2011-2022 走看看