文档章节

javascript let和const命令

chang江
 chang江
发布于 2017/05/04 14:57
字数 576
阅读 4
收藏 0

 第一次写博客,直接上代码了。

//{} 花括号是代码块  let命令只在代码块内有效
'use strict'
{
    let a = 10;
	var b = 20;
	console.log(a)	//10
	console.log(b)	//20
}
console.log(b)	//20
console.log(a)	//ReferenceError 引用错误
'use strict'

//let 只在循环体内有效 如果在循环体外引用就会报错
//如果是var会在全局范围内有效

for(let i=0;i<10;i++){}
console.log(i) //ReferenceError  ruai fe run ci

//for循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个子作用域
for(let i = 0 ; i < 3 ; i++){
	let i = "abc";
	console.log(i)
}
//abc
//abc
//abc
'use strict'
//var命令会发生"变量提升"现象,即变量可以在声明之前使用,值为undefined

//let不存在变量提升
//为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错

//var
console.log(foo);  //undefined
var foo="2"

//let
console.log(bar); //报错:ReferenceError  引用错误
let bar="1"
'use strict'
//暂时性的死区

//1:只要在块级作用域内存在let命令,它所声明的变量就绑定到了这个区域,不在受外部影响
var t = 123;
if(true){
	t = "abc";	//ReferenceError
	let t;
}
//上面代码中存在全局变量t,但是块级作用域内又声明了一个局部变量t,导致后者绑定这个块级作用域


function bar(x = y, y = 2){
	return [ x, y]
}
bar(); //ReferenceError :y is not defined
//调用bar函数报错,是因为参数x默认值等于另一个参数,而此时y还没有声明,属于死区,如果y的默认值是x就不会报错了
  1. const的作用域和let命令相同,只在声明所在的作用域内有效
  2. const声明一个只读的常量。一旦声明,常量的值就不会改变(const的值也不是不可变得)

const的值也不是不可变得,而是变量指向的内存不可变。

  1. 简单类型(数值,字符串,布尔)的值保存在变量指向的内存,等于常量
  2. 符合类型(数组和对象)变量指向的内存,保存的是一个指针,所以数据结构的变化是不受控制的

© 著作权归作者所有

共有 人打赏支持
chang江
粉丝 0
博文 3
码字总数 1620
作品 0
房山
程序员
ECMAScript 6教程 (一)

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ 。该系列课程是汇智网 整理编...

笔阁
2015/07/20
0
0
前端基础(二):变量声明的6种方法

字数:2869 阅读时间:10分钟 最新的ECMAScript规范中,变量声明有var、function、let、const、import、class六种方法。 var 语法: var varname [= value1 [, vaname1[,valname2 ...]]]; 对...

老司机带你撸代码
06/09
0
0
现代 JavaScript 的变量作用域

原文链接:Variable Scope in Modern JavaScript 译者:OFED 现代 JavaScript 的变量作用域 当与其他 JavaScript 开发人员交谈时,令我经常感到惊讶的是,有很多人不知道变量作用域是如何在 ...

涂鸦码龙
08/17
0
0
[JavaScript]-Array构造的数组使用map为何失效?

[示例] 假设你需要生成一个从0到99的数组。你要怎么做呢?下面是一种解法: 看到这种使用传统的for循环的方式会有点不大习惯。事实上,各种高阶函数,像forEach, map, filter, reduce足以写出...

xiaoLoo
06/27
0
0
【探秘ES6】系列专栏(十二):let和const

ES6作为新一代JavaScript标准,已正式与广大前端开发者见面。为了让大家对ES6的诸多新特性有更深入的了解,Mozilla Web开发者博客推出了《ES6 In Depth》系列文章。CSDN已获授权,将持续对该...

一配
2015/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内存模型是怎么解决缓存一致性的?

在再有人问你Java内存模型是什么,就把这篇文章发给他。这篇文章中,我们介绍过关于Java内容模型的来龙去脉。 我们在文章中提到过,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距...

Java填坑之路
13分钟前
1
0
vue-cli 3.0 初体验

最近复习了下vue,突然发现vue-cli已经更新到3.0版本了,并且变化蛮大,看来要不停的学习,真是一入前端深似海。 安装步骤: 1、全局安装 npm install -g @vue/cli Vue CLI 的包名称由 vue-...

tianyawhl
15分钟前
0
0
Angular进阶之路

【初级】会写页面,能出东西。 给定环境和 rest API,不用第三方库,能在十分钟内完成一个 master/detail 结构的带路由的应用(可以不管美观)。 知识点:Angular CLI、组件、路由、HTTP 服务...

陆小七的主页
18分钟前
0
0
Redis缓存数据库安全加固指导(一)

背景 在众多开源缓存技术中,Redis无疑是目前功能最为强大,应用最多的缓存技术之一,参考2018年国外数据库技术权威网站DB-Engines关于key-value数据库流行度排名,Redis暂列第一位,但是原生...

中间件小哥
18分钟前
0
0
百万级数据mysql分区

1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。 2. 表分区与分表的区别 分表...

罗文浩
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部