let 与 const 的用法

  • let 用来声明变量,并且会在当前作用域形成 代码块
  • conts 用来声明常量,所谓常量就是物理指针不可以更改的变量。
  • 所谓代码块,最简单的做法就是(这个 {} 就是一个代码块) :
{
let a = 1;
}
console.log(a) // 报错 a is not defined

一.let

1)let 声明变量,变量不会被提升。

function fn1(){
console.log(a);
let a = 1;
}
fn1(); // 报错 var b = 2;
function fn2(){
console.log(b);
let b = 1;
}
fn2(); // 报错

2)for 循环中 使用let 定义变量,只在for的循环周期内可以使用。

// 在ES5 中如果想使用for循环每次的i需要使用闭包的特性,每次执行都会被覆盖直到循环结束
var arr = [];
for(var i=0; i<5; i++){
arr.push(function(){
console.log(i);
})
}
arr[1]() // 5
arr[2]() // 5
arr[3]() // 5
arr[4]() // 5

如果使用ES6提供的let来声明变量:

var arr = [];  // let arr = [] 都可以
for(let i=0; i<5; i++){
arr.push(function (){
console.log(i)
})
}
arr[0]() // 0
arr[1]() // 1
arr[2]() // 2

所以大家在使用的时候需要注意以下几个问题:

let i;
for(i = 0; i < 5; i++){
setTimeout(function(){
console.log(i); // 5 5 5 5 5
},1000)
}

不同于:

for(let i = 0; i < 5; i++){
setTimeout(function(){
console.log(i); // 0 1 2 3 4
},1000)
}

二.const

const 除了不能改变物理指针的特性,其他特性和 let 一样。

当声明普通数据类型的时候,那么一但声明了,就不可以再改变。

const a = 1;

a = 2;  //Uncaught TypeError: Assignment to constant variable.

当声明复杂数据类型的时候,物理指针不可以改变,但是可以改变数据内的属性值,以及可以给数据添加新属性等操作。

const o = {a: 1};

o.a = 2;
o.b = 3; console.log(o); o = {}; // 报错
// ES6
"use strict"
function a(){
console.log(1);
}
function fn(){
a();
if(false){
function a(){
console.log(2)
}
}
}
fn();

三. var、let、const的区别

  1. var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
  2. let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  3. const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
<script type="text/javascript">
// 块作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 报错
var aa;
let bb;
// const cc; // 报错
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(aa); // undefined
console.log(bb); // undefined
}
console.log(a); // 1
// console.log(b); // 报错
// console.log(c); // 报错 // 函数作用域
(function A() {
var d = 5;
let e = 6;
const f = 7;
console.log(d); // 5
console.log(e); // 6 (在同一个{ }中,也属于同一个块,可以正常访问到)
console.log(f); // 7 (在同一个{ }中,也属于同一个块,可以正常访问到) })();
// console.log(d); // 报错
// console.log(e); // 报错
// console.log(f); // 报错
</script>
 

let 与 const 的用法的更多相关文章

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

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

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

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

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

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

  4. C++const关键字用法

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

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

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

  6. C/C++语言中const的用法

    1. const 在C和C++中的区别     C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所 ...

  7. 【转】const的用法,特别是用在函数前面与后面的区别!

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

  8. C++中const关键字用法

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  9. C++中的const的用法

    const对象.指向const对象的指针.const指针(通过一个面试题来了解)   1.const对象 (1)关于const,很多企业的笔试.面试都会出现,很简单,就问你“const的含义?”. 我 ...

随机推荐

  1. Springmvc 整合 jetbrick 实例

    应用环境:  <jetbrick.version>1.2.8</jetbrick.version> <antlr4-runtime.version>4.2.2< ...

  2. Spark 核心篇-SparkContext

    本章内容: 1.功能描述 本篇文章就要根据源码分析SparkContext所做的一些事情,用过Spark的开发者都知道SparkContext是编写Spark程序用到的第一个类,足以说明SparkCo ...

  3. [APM] OneAPM 云监控部署与试用体验

    摘要: 作为 Zabbix 骨灰级粉丝,一直以来对第三方监控(APM)都是拒绝的.一来觉得收费,二来担心数据被人所知,三来觉得 Zabbix 牛逼到无可取代.但是,随着 APM 市场的火爆,我决定「放 ...

  4. 如何在TextView类中创建超链接 Linkify

    Linkify是一个辅助类,通过RegEx样式匹配,自动地在TextView类(和继承的类)中创建超链接.符合特定的RegEx样式的文本会被转变成可点击的超链接,这些超链接隐式的调用startActi ...

  5. 推荐几个Windows工具软件: ASuite - 便携的程序启动器

    主页: http://asuite.sourceforge.net 下载: http://sourceforge.net/projects/asuite/ ASuite is a lightweigh ...

  6. Qt 密码框不可选中、复制、粘贴、无右键菜单等

    在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同. 例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 一般的密码框:(默认 可以选中,复制, ...

  7. 阿里巴巴面试之利用两个int值实现读写锁

    首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资 ...

  8. 一键解包/打包boot.img/recovery.img工具(高通/MTK双版 支持android 5.1以上)

    下载地址: 链接: https://pan.baidu.com/s/1hsA2oWc 密码: skdx

  9. EasyUI datagrid columns 中 field 区分大小写

    columns: [ [ {field: 'id', title: 'ID'}, {field: 'name', title: 'NAME'}, {field: 'DT_CRT_TM', title: ...

  10. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...