<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、变量提升*/
for (let j = 0; j < 3; j++) {
// let j = 'abc';
console.log(j);//输出0 1 2
}
let bar = 2;
console.log("let:" + bar); // 必须先声明再使用,输出2 console.log("var:" + foo); // 变量先使用再声明会报错undefined
var foo = 2; /*3、暂时性死区:意味着typeof不再是一个百分之百安全的操作。
本质:只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,
只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
*/
if (true) {
// TDZ开始
tmp = 'abc';
console.log("tmp:" + tmp); // abc let tmp; // TDZ结束
console.log("let声明:" + tmp); // undefined tmp = 123;
console.log("tmp赋值:" + tmp); // 123 //eg. typeof x;
console.log("typeOf:" + x);// undefined let x;
console.log("x:" + x);// undefined console.log(typeof undeclared_variable);// undefined 如果一个变量根本没有被声明,使用typeof反而不会报错。
} function bar1(x = y, y = 2) {//此处x已声明,但是y没有声明,处于死区
console.log([x, y]);
} bar1(); // undefined function bar2(x = 3, y = x) {//此处x和y已声明,使用这两个变量没问题
console.log([x, y]);
} bar2(); // [3,3] var x1 = x1;
console.log(x1);// undefined //let x1 = x1;
console.log(x1);// 报错(在变量x的声明语句还没有执行完成前,就去取x的值,导致报错”x 未定义“。) /*4、不允许重复声明变量或参数,否则报错*/ /*5、变量嵌套定义时的特点:
* 1)外层无法读取内层作用域定义的内部变量,如变量 insane
* 2)内层可以定义与外层作用域同名的变量,如变量 insane1*/ {
{
{
{
{
let insane = 'Hello World'
}
//console.log("insane:"+insane); // 报错insane is not defined"
}
}
}
} {
{
{
{
let insane1 = 'Hello World';
console.log("insane1:" + insane1); // 输出Hello World
{
let insane1 = 'Hello World1';
console.log("insane1:" + insane1); // 输出Hello World1
} }
}
}
} /*写法习惯*/
// IIFE 写法
(function () {
var tmp = ...;
...
}()); // 块级作用域写法
{
let tmp = ...;
...
} /*块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。*/
function f() {
console.log('I am outside!');
} (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;//报错,不能重新赋值 // const foo;//const只声明不赋值也报错
/*2、const 作用域
* const的作用域与let命令相同:只在声明所在的块级作用域内有效。如下示例
* */
if (true) {
const MAX = 5;
}
//console.log(MAX);//MAX is not defined" /*也有暂时性死区,声明的位置需要在使用前面,否则报错;
* 不能重复声明变量
* */
var message = "Hello!";
//const message = "Goodbye!";//报错,不能重复声明同一个变量 /*3、const本质:
* const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
* 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
* 但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,
* const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,
* 就完全不能控制了。因此,将一个对象声明为常量必须非常小心。*/ /*4、声明变量的方法
* var命令和function命令声明的全局变量,依旧是顶层对象的属性;
* 另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
* */ }
}
}
</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. 求x!在k进制下后缀零的个数(洛谷月赛T1)

    求x!在k进制下后缀和的个数 20分:     求十进制下的x!后缀和的个数 40分: 高精求阶乘,直接模拟过程 (我不管反正我不打,本蒟蒻最讨厌高精了) 60分     利用一个定理(网上有求x!在 ...

  2. laravel后台扩展包

    https://github.com/the-control-group/voyager

  3. ServletConfig详解 (转载)

    ServletConfig详解  (转载)   容器初始化一个servlet时,会为这个servlet建一个唯一的ServletConfig.容器从DD读出Servlet初始化参数,并把这些参数交给S ...

  4. 【OI】拓扑排序

    拓扑排序 首先要求图为DAG 算法:首先将度为1的节点加入队列每次取出队首点u,在图中删去和u相邻的边继续将度数为1的点加入队列 到了最后, 如果没有度数为1的点,则图不是DAG 通过拓扑排序可以给D ...

  5. iOS 微信支付如果遇到跳转只有一个确定请看这里

    http://www.cocoachina.com/bbs/read.php?tid-321546.html 今天在联调微信支付,不得不说,和它比起来,阿里的支付sdk真的是太好用了.果然和后端同学在 ...

  6. 跟我一起认识axure(一)

    第一步下载:https://www.axure.com.cn/ 第二步点击安装,一路next 第三步:认识Axure RP工作界面

  7. Kubernetes1.3新特性:支持GPU

    (一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫" ...

  8. 从程序员的角度分析微信小程序

    昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200 ...

  9. 【JZOJ4888】【NOIP2016提高A组集训第14场11.12】最近公共祖先

    题目描述 YJC最近在学习树的有关知识.今天,他遇到了这么一个概念:最近公共祖先.对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. ...

  10. Autodesk 卸载工具,一键完全彻底卸载删除autodesk软件专门卸载工具

    autodesk卸载工具(AUTO Uninstaller)是专门为了针对autodesk类软件卸载不干净而导致autodesk安装失败问题进行研发的autodesk一键卸载工具.现在虽然360或一些 ...