es6 let和const的用法
<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的用法的更多相关文章
- let 与 const 的用法
let 与 const 的用法 let 用来声明变量,并且会在当前作用域形成 代码块 conts 用来声明常量,所谓常量就是物理指针不可以更改的变量. 所谓代码块,最简单的做法就是(这个 {} 就是一 ...
- C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏
const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...
- const的用法,特别是用在函数前面与后面的区别!
const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const ...
- ECMAScript 6 入门之let和const的用法
1.let的用法 1. //查看js的引入路径是否正确 console.log("1:",1) 2. var a=1; let b=2; console.log("a:& ...
- ES6中map和set用法
ES6中map和set用法 --转载自廖雪峰的官方网站 一.map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Arra ...
- C++const关键字用法
const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进 ...
- C++ 中 static 与 const 的用法及对比
在这个学习过程中我对 static 及 const 的使用时常会混淆,因此整理,加深记忆 一.类的静态成员 如果某个属性为整个类所共有,不属于任何一个具体对象,则采用 static 关键字来声明静态成 ...
- es6中let,const区别与其用法
ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...
- ES6中const的用法
const声明一个只读的常量.一旦声明,常量的值就不能改变.且const一旦声明变量,就必须立即初始化,不能留到以后赋值. const的作用域与let命令相同:只在声明所在的块级作用域内有效. con ...
随机推荐
- scala2.11读取文件
1.读取行 要读取文件的所有行,可以调用scala.io.Source对象的getLines方法: import scala.io.Source val source = Source.fromFil ...
- Hdu 1800 字符串hash
题目链接 题意: 给出n(n<=3000)个字符串(长度<30,数字组成,肯能存在前导0), 问该序列最少可以分成多少个单调序列.可以转化成求相同字符串的个数的最大值 附上代码: /*** ...
- 使用 git 来管理 PCB 版本
使用 git 来管理 PCB 版本 在传统的 PCB 版本管理是复制一份,再重命名,写上日期,写上修改日志. 自从接触了 git 后,发现 git 的版本管理完全可以胜任,且可以做的更好. 原来使用商 ...
- docker查看运行容器详细信息
使用docker ps命令可以查看所有正在运行中的容器列表, 使用docker inspect命令我们可以查看更详细的关于某一个容器的信息. $ docker inspect 容器id/image
- shell学习(17)- shell中2>&1的解释及输入输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- 巨蟒python全栈开发-第11阶段 ansible_project2
一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...
- XML之DOM解析文档 Day24
TestDom.java package com.sxt.dom; import java.io.File; import java.io.IOException; import javax.xml. ...
- LOJ 10239 有趣的数列
LOJ 10239 有趣的数列 首先可以将奇数视作入栈,偶数视作出栈,那么它是卡特兰数,其实打表也能看出来,而且好像可以用dp? 不过这道题的难点不在这里,p不是素数,所以不能用求逆元来做,不过前50 ...
- Laravel如何引用第三方(自定义)库
想做一个网页抓取的功能,底层使用php的laravel框架. 这里使用phpQuery库来实现网页抓取,这里不做介绍. 需要了解的可以百度,或者等我填坑. 下载最新版本可以前往https://code ...
- 实验4 JavaBean创建和使用(计算器)
实验4 JavaBean创建和使用 一.实验目的 1.掌握JavaBean创建和使用方法: 2.领会JavaBean简化页面设计的优势等. 二.实验内容 1.设计诸如以下页面的简单计算器 要求:完成 ...