ES6学习笔记:块级作用域

作用域分类

  • 全局作用域
  • 局部作用域
  • 块级作用域

全局作用域示例

var i=2;
for (var i = 0; i < 10; i++) {
}
console.log(i);//10
  • 这里就出现了意料之外的结果,此种原因是变量提升造成过的

局部作用域示例

!(function () {
console.log(b);//undefined
var b = 2;
})()
  • 为什么会输出undefined,而不是报错?
  • 此种也是变量提升造成的意料之外的结果,上面代码等同于下面.
!(function () {
var b;
console.log(b);//undefined
b=2;
})()

这里就抛出来了一个问题,什么是变量提升?

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

ES6中引入了块级作用域的概念

//块级作用域使用方式
{
//...code
}

注意:使用 var 声明变量不受块级作用域限制,依旧会造成的变量提升,因此

引入了两个新的变量

  • let

    • 用法:声明一个变量
    • 特点:
      • 只在声明的代码块有效
      • 在同一作用域中不能重复声明
      • 没有变量提升
      • 暂时性死区
  • const
    • 用法:声明一个只读变量(可理解为常量)

    • 特点:跟let一致

    • 注意事项:

      • 变量声明的同时必须立即赋值
      • 如声明的是简单类型数据,变量的值不可改变
    • 实质:保证变量指向的内存地址所保存的数据不允许变动

      简单类型如字符串,数字,布尔值,复杂类型如对象,数组,函数,所以const声明复杂类型对象时需慎重

使用示例

  • 示例1
if(true){
var a=10;
}
console.log(a);//10
  • 示例2
if(true){
let a=10;
}
console.log(a);//error: a is not defined
  • 示例3
{
let a=2;
} {
let a=3;
console.log(a);//3
}
  • 示例4
{
const a=2;
console.log(a);//2
a = 3;//error:"a" is read-only
}
  • 示例5
{
const obj={
name:'小明',
age:18
}
console.log(obj);//{name:"小明",age:18}
obj.name="小红";
console.log(obj);//{name:"小红",age:18}
}

ES6学习笔记之块级作用域的更多相关文章

  1. ES6入门一:块级作用域(let&const)、spread展开、rest收集

    let声明 const声明 块级作用域 spread/rest 一.let声明与块作用域 在ES6之前,JavaScript中的作用域基本单元就是function.现在有了let就可以创建任意块的声明 ...

  2. ES6 学习笔记之一 块作用域与let和const

    ---恢复内容开始--- 在学习ES6的块作用域和 let.const 之前,我们先来看看ES5以前的 var 关键字. var 关键字用于定义一个变量,通常我们会将其与变量的赋值合并为一条语句,就像 ...

  3. ES6系列之let/const及块级作用域

    本系列是在平时阅读.学习.实际项目中有关于es6中的新特性.用发的简单总结,目的是记录以备日后温习:本系列预计包含let/const.箭头函数.解构.常用新增方法.Symbol.Set&Map ...

  4. ES6——块级作用域

    前面的话 过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域.本文将详细介绍ES6新引入的块级作用域绑定机制.let和 ...

  5. ES6-let、const和块级作用域

    1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填 ...

  6. ES6 学习笔记 - let和const

    let 和 const 命令 学习资料:ECMAScript 6 入门 let 所声明的变量,只在let命令所在的代码块内有效.用途:循环计数器. 如果使用var,只有一个全局变量i: var a = ...

  7. 《浏览器工作原理与实践》<09>块级作用域:var缺陷以及为什么要引入let和const?

    在前面我们已经讲解了 JavaScript 中变量提升的相关内容,正是由于 JavaScript 存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是 JavaScript 的一个重要设计缺陷 ...

  8. let/const及块级作用域

    本系列是在平时阅读.学习.实际项目中有关于es6中的新特性.用发的简单总结,目的是记录以备日后温习:本系列预计包含let/const.箭头函数.解构.常用新增方法.Symbol.Set&Map ...

  9. ES6学习笔记一

    块级作用域:在ES5中只有全局作用域与函数作用域,ES6中新增的块级作用域避免变量的覆盖与泄露.考虑到代码运行环境,在块级作用域中应避免声明函数,最好用函数表达式的方式声明. let与const:le ...

随机推荐

  1. linux centos&Ubuntu&RedHat更换软件源

    linux三大版本更换软件源 前排提示,有的源可能已经失效,如果发现请留言或自行寻找其他源. 1.centos mv /etc/yum.repos.d/CentOS-Base.repo [--path ...

  2. thinkphp 命名范围

    在应用开发过程中,使用最多的操作还是数据查询操作,凭借ThinkPHP的连贯操作的特性,可以使得查询操作变得更优雅和清晰,命名范围功能则是给模型操作定义了一系列的封装,让你更方便的操作数据. 命名范围 ...

  3. coreseek 基与Sphinx 的全文索引

    假设有两张那个表,分别为articles,article_photos两张表.搜索的时候,要匹配articles.title.articles.intro.article_photos.caption ...

  4. 国内有哪些质量高的JAVA社区?

    国内有哪些质量高的JAVA社区? 转自:http://www.zhihu.com/question/29836842#answer-13737722 并发编程网 - ifeve.com 强烈推荐 Im ...

  5. Java-MyBatis-MyBatis3-XML映射文件:缓存

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:缓存 1.返回顶部 1. 缓存 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制. 为了使它更 ...

  6. intellij idea中去除@Autowired注入对象带来的下划线提示

    场景: idea中通过@Autowired注入的对象一直有下划线提示,虽然不影响运行 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspe ...

  7. 使用 jQuery 设置 disabled 属性与移除 disabled 属性

    表单中readOnly和disabled的区别:Readonly只针对input(text/ password)和textarea有效,而disabled对于所有的表单元素都有效,包括select,r ...

  8. HBase 概念视图

  9. PageHelper原理

    1.要是用pagehelper,首先maven项目,要引入 <dependency> <groupId>com.github.pagehelper</groupId> ...

  10. light oj 1105 规律

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...