1. <template>
    <div>
    <el-button @click="click()">let用法:点击看控制台</el-button>
    <el-button @click="clickConst()">const用法:点击看控制台</el-button>
    </div>
    </template>
    <script>
    export default {
    name: "Base",
    methods: {
    click: function () {
    /*1、let作用域:自己最近的{}*/
    let a = 10;//只在let命令所在的代码块内有效(在click方法外引用就会报错)。适用于for循环。
    var c = [];
    for (let i = 0; i < 10; i++) {
    /*i用var定义,输出结果都是10,也就是说,所有数组c的成员里面的i,
    指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是10。*/
    c[i] = function () {
    console.log(i);
    };
    }
    c[7]();//结果7,使用let定义时i是几输出就是几
  2.  
  3. //2、变量提升*/
    for (let j = 0; j < 3; j++) {
    // let j = 'abc';
    console.log(j);//输出0 1 2
    }
    let bar = 2;
    console.log("let:" + bar); // 必须先声明再使用,输出2
  4.  
  5. console.log("var:" + foo); // 变量先使用再声明会报错undefined
    var foo = 2;
  6.  
  7. /*3、暂时性死区:意味着typeof不再是一个百分之百安全的操作。
    本质:只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,
    只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
    */
    if (true) {
    // TDZ开始
    tmp = 'abc';
    console.log("tmp:" + tmp); // abc
  8.  
  9. let tmp; // TDZ结束
    console.log("let声明:" + tmp); // undefined
  10.  
  11. tmp = 123;
    console.log("tmp赋值:" + tmp); // 123
  12.  
  13. //eg.
  14.  
  15. typeof x;
    console.log("typeOf:" + x);// undefined
  16.  
  17. let x;
    console.log("x:" + x);// undefined
  18.  
  19. console.log(typeof undeclared_variable);// undefined 如果一个变量根本没有被声明,使用typeof反而不会报错。
    }
  20.  
  21. function bar1(x = y, y = 2) {//此处x已声明,但是y没有声明,处于死区
    console.log([x, y]);
    }
  22.  
  23. bar1(); // undefined
  24.  
  25. function bar2(x = 3, y = x) {//此处x和y已声明,使用这两个变量没问题
    console.log([x, y]);
    }
  26.  
  27. bar2(); // [3,3]
  28.  
  29. var x1 = x1;
    console.log(x1);// undefined
  30.  
  31. //let x1 = x1;
    console.log(x1);// 报错(在变量x的声明语句还没有执行完成前,就去取x的值,导致报错”x 未定义“。)
  32.  
  33. /*4、不允许重复声明变量或参数,否则报错*/
  34.  
  35. /*5、变量嵌套定义时的特点:
    * 1)外层无法读取内层作用域定义的内部变量,如变量 insane
    * 2)内层可以定义与外层作用域同名的变量,如变量 insane1*/
  36.  
  37. {
    {
    {
    {
    {
    let insane = 'Hello World'
    }
    //console.log("insane:"+insane); // 报错insane is not defined"
    }
    }
    }
    }
  38.  
  39. {
    {
    {
    {
    let insane1 = 'Hello World';
    console.log("insane1:" + insane1); // 输出Hello World
    {
    let insane1 = 'Hello World1';
    console.log("insane1:" + insane1); // 输出Hello World1
    }
  40.  
  41. }
    }
    }
    }
  42.  
  43. /*写法习惯*/
    // IIFE 写法
    (function () {
    var tmp = ...;
    ...
    }());
  44.  
  45. // 块级作用域写法
    {
    let tmp = ...;
    ...
    }
  46.  
  47. /*块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。*/
    function f() {
    console.log('I am outside!');
    }
  48.  
  49. (function () {
    if (false) {
    // 重复声明一次函数f
    function f() {
    console.log('I am inside!');
    }
    }
    f();//I am outside!似乎if内声明的函数一直没有调用到
    }());
    },
    clickConst: function () {
    /*1、定义:const声明一个只读的常量。一旦声明,常量的值就不能改变。
    * const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
    * */
    const PI= 3.1415926;//不变的常量
    // PI=3;//报错,不能重新赋值
  50.  
  51. // const foo;//const只声明不赋值也报错
    /*2、const 作用域
    * const的作用域与let命令相同:只在声明所在的块级作用域内有效。如下示例
    * */
    if (true) {
    const MAX = 5;
    }
    //console.log(MAX);//MAX is not defined"
  52.  
  53. /*也有暂时性死区,声明的位置需要在使用前面,否则报错;
    * 不能重复声明变量
    * */
    var message = "Hello!";
    //const message = "Goodbye!";//报错,不能重复声明同一个变量
  54.  
  55. /*3、const本质:
    * const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
    * 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
    * 但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,
    * const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,
    * 就完全不能控制了。因此,将一个对象声明为常量必须非常小心。*/
  56.  
  57. /*4、声明变量的方法
    * var命令和function命令声明的全局变量,依旧是顶层对象的属性;
    * 另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
    * */
  58.  
  59. }
    }
    }
    </script>
    <style>
    </style>

es6 let和const的用法的更多相关文章

  1. let 与 const 的用法

    let 与 const 的用法 let 用来声明变量,并且会在当前作用域形成 代码块 conts 用来声明常量,所谓常量就是物理指针不可以更改的变量. 所谓代码块,最简单的做法就是(这个 {} 就是一 ...

  2. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  3. const的用法,特别是用在函数前面与后面的区别!

    const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const ...

  4. ECMAScript 6 入门之let和const的用法

    1.let的用法 1. //查看js的引入路径是否正确 console.log("1:",1) 2. var a=1; let b=2; console.log("a:& ...

  5. ES6中map和set用法

    ES6中map和set用法 --转载自廖雪峰的官方网站 一.map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Arra ...

  6. C++const关键字用法

    const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进 ...

  7. C++ 中 static 与 const 的用法及对比

    在这个学习过程中我对 static 及 const 的使用时常会混淆,因此整理,加深记忆 一.类的静态成员 如果某个属性为整个类所共有,不属于任何一个具体对象,则采用 static 关键字来声明静态成 ...

  8. es6中let,const区别与其用法

    ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...

  9. ES6中const的用法

    const声明一个只读的常量.一旦声明,常量的值就不能改变.且const一旦声明变量,就必须立即初始化,不能留到以后赋值. const的作用域与let命令相同:只在声明所在的块级作用域内有效. con ...

随机推荐

  1. 日期格式之——new Date()的用法

    获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getF ...

  2. JS中获取URL的参数的方法

    这里,我学习的是使用正则的方法来获得URL的参数 函数的方法如下: <a href="www.baidu.com">百度</a> <script sr ...

  3. input的相关兼容性问题

    近来在制作登陆页的input文本框和密码框的时候,具体的实例可参考实现带样式的表单验证,我们发现在IE下默认的情况下,input 标签的密码框和文本框宽度不一致,这就尴尬了. 解决这个办法,我们是直接 ...

  4. laravel 分页带参数

    {{$data->appends(request()->except(['page']))->links()}}

  5. Directx11教程(3) 一个最基本D3D应用程序(1)

    原文:Directx11教程(3) 一个最基本D3D应用程序(1)       在前一篇教程程序代码的基础上,这次我们将增加2个类: InputClass,键盘处理的代码将放在这个类里面,Graphi ...

  6. 2018-11-21-WPF-解决-ViewBox--不显示线的问题

    title author date CreateTime categories WPF 解决 ViewBox 不显示线的问题 lindexi 2018-11-21 09:37:53 +0800 201 ...

  7. 【风马一族_php】常用的语句

    设置脚本的编码 <?php header('Content-type:text/html;charset=utf-8');  ?> 按原格式的输入内容 echo <pre>; ...

  8. HDU 4193

    本题思路:用sum[]数组维护前缀和, 当然这里需要把原数组扩大为原来的两倍. 然后对于任意一个长度为n的区间 k.....k+n-1,如果有该区间内的最小值大于等于sum[k-1]那么该种情况就符合 ...

  9. zabbix程序架构

    zabbix程序架构 特性 数据采样:snmp;ssh/telnet;agent,ipmi,jmx 自定义检测机制 自定义指定时间间隔 实时绘图:展示 graph map screen slide s ...

  10. 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...