块级作用域

for(var i = ; i < ; i++){}
console.log(i); // for(let j = ; j < ; j++){}
console.log(j); //"ReferenceError: j is not defined

疑问: https://segmentfault.com/q/1010000004643248

不存在变量提升

console.log(a); // 输出undefined
console.log(b); // 报错ReferenceError
console.log(c); // 报错ReferenceError
var a = ;
let b = ;

注意区别undefinedReferenceError

暂时性死区(TDZ)

只要进入当前块级作用域,所使用的变量已经存在了,但在声明之前都属于死区,不可进行操作。

注意: typeof不再是100%安全的操作

typeof x; // ReferenceError
typeof y // undefined
let x;

不允许重复声明

let x = ;
let x; // "SyntaxError: Identifier 'x' has already been declared var y = ;
var y = ; // y = 3

块级作用域

// 匿名函数写法
(function () {
var tmp = ...;
...
}()); // 块级作用域写法
{
let tmp = ...;
...
}

ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。

// ES5
'use strict';
if (true) {
function f() {} // 报错
}

ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少

// 报错
'use strict';
if (true)
function f() {}

声明的全局变量不再是window的属性

"use strict";
var a = ;
console.log(window.a) // let b = ;
console.log(window.b) // undefined

参考:https://segmentfault.com/a/1190000004679743

 

最新文章

  1. EditText中imeOptions属性使用及设置无效解决
  2. perl q qq qr qw qx 区别与使用方法
  3. Bootstrap 固定定位(Affix)
  4. IOS 开发的官方文档链接
  5. Spring Boot 环境变量读取 和 属性对象的绑定
  6. 浅析C#基于TCP协议的SCOKET通信
  7. 用C++试着完成Python简明教程后面的练习
  8. Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路
  9. yzoi2226最小步数的详细解法
  10. HTML的简单介绍
  11. 【转】DELL戴尔N4050笔记本拆机(图文)
  12. Spark1.0.0 分布式环境搭建
  13. 认识bash这个shell
  14. 建造者(Builder)模式
  15. 【BZOJ4003】【JLOI2015】城池攻占(左偏树)
  16. Neutron :默认通过 dnsmasq 实现 DHCP 功能----Namespace
  17. Could not get JDBC connection
  18. pycharm设置pytest运行程序
  19. pytest 4.scope=&quot;module&quot;介绍
  20. 【UOJ#21】【UR#1】缩进优化

热门文章

  1. 力扣算法题—051N皇后问题
  2. 10.scrapy框架简介和基础应用
  3. C#基础知识之读取xlsx文件Excel2007
  4. Cassandra联手Spark 大数据分析将迎来哪些改变?
  5. openvon安装
  6. 在 C 代码中嵌入 Python 语句或使用 Python 模块 (Visual Studio 2013 环境设置)
  7. Spring AOP无法拦截Controller中的方法
  8. Echo团队Alpha冲刺随笔 - 第五天
  9. 环境部署(一):Linux下安装JDK
  10. AbstractQueuedSynchronizer