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 ...
随机推荐
- 日期格式之——new Date()的用法
获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getF ...
- JS中获取URL的参数的方法
这里,我学习的是使用正则的方法来获得URL的参数 函数的方法如下: <a href="www.baidu.com">百度</a> <script sr ...
- input的相关兼容性问题
近来在制作登陆页的input文本框和密码框的时候,具体的实例可参考实现带样式的表单验证,我们发现在IE下默认的情况下,input 标签的密码框和文本框宽度不一致,这就尴尬了. 解决这个办法,我们是直接 ...
- laravel 分页带参数
{{$data->appends(request()->except(['page']))->links()}}
- Directx11教程(3) 一个最基本D3D应用程序(1)
原文:Directx11教程(3) 一个最基本D3D应用程序(1) 在前一篇教程程序代码的基础上,这次我们将增加2个类: InputClass,键盘处理的代码将放在这个类里面,Graphi ...
- 2018-11-21-WPF-解决-ViewBox--不显示线的问题
title author date CreateTime categories WPF 解决 ViewBox 不显示线的问题 lindexi 2018-11-21 09:37:53 +0800 201 ...
- 【风马一族_php】常用的语句
设置脚本的编码 <?php header('Content-type:text/html;charset=utf-8'); ?> 按原格式的输入内容 echo <pre>; ...
- HDU 4193
本题思路:用sum[]数组维护前缀和, 当然这里需要把原数组扩大为原来的两倍. 然后对于任意一个长度为n的区间 k.....k+n-1,如果有该区间内的最小值大于等于sum[k-1]那么该种情况就符合 ...
- zabbix程序架构
zabbix程序架构 特性 数据采样:snmp;ssh/telnet;agent,ipmi,jmx 自定义检测机制 自定义指定时间间隔 实时绘图:展示 graph map screen slide s ...
- 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译
title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...