美文网首页
什么是TDZ?

什么是TDZ?

作者: geekjiang | 来源:发表于2017-01-22 17:45 被阅读0次

起因:http://weibo.com/1400854834/ErH6VjDgg?from=page_1005051400854834_profile&wvr=6&mod=weibotime&type=comment#_loginLayer_1485042085708
不赘述。

所以。。到底什么是TDZ?
TDZ 是 Temporal Dead Zone 的缩写,翻译过来就是时间死区。

什么是时间死区呢?
我的理解就是一个变量,从定义到被赋值的中间这段时间就成为时间死区。如果你的console.log是在时间死区里,那么就会报错。
console.log(aLet)  // would throw ReferenceError
let aLet;
console.log(aLet); // undefined
aLet = 10;
console.log(aLet); // 10

上述代码中,在aLet 被复制 10 之前,就被称为时间死区。

let x = 'outer value';
(function() {
  // start TDZ for x
  console.log(x);
  let x = 'inner value'; // declaration ends TDZ for x
}());

那么问题来了,如果我的代码写成下面这样.

var a = 1
function test(a=a){
  console.log(a)
}
test()

居然报错了。。。
这是如果参数存在默认值,那就出现了第三种作用域parameters environment(参数作用域)。
在上述代码中的参数作用域中,a=a 相当于 let a =a ,他会去找自己内部定义的a的值,但是这时候a还处于TDZ中,所以会报出 a is not defined 的错误。

那么参数作用域可以访问函数作用域么?

function test(a = b){
  var b =1
  console.log(a)
}
test()

又报出了b is not defined的错误。

说明参数作用域既访问不了全局作用域,也访问不了函数作用域。

引用:

http://www.jianshu.com/p/ebc51ce05416

https://github.com/ruanyf/es6tutorial/blob/eb2a62215a7bc4f73ac08ac29a90a248a48193ea/docs/function.md

http://code.wileam.com/default-value-n-params-env/

http://jsrocks.org/2015/01/temporal-dead-zone-tdz-demystified/

相关文章

  • 什么是TDZ?

    起因:http://weibo.com/1400854834/ErH6VjDgg?from=page_100505...

  • 详解ES6暂存死区TDZ

    文章中如有不当的地方请在评论区留言~ 加油~ 一起进步~ 什么是暂存死区 暂存死区TDZ(Temporal Dea...

  • hoisting-vs-tdz

    hoisting-vs-tdz.md In JavaScript, all binding declaration...

  • 关于TDZ暂存死区

    前段时间在阮一峰微博上偶然学习到关于TDZ的东东,于是辗转于个各个学习网站并记录学习。 Temporal Dead...

  • TDZ暂时性死区

    由阮一峰老师的一条微博引发的 TDZ 思考 var 和 let 声明的变量在发生声明提升时,初始化(initial...

  • var let const

    var 可声明前置 let不可声明前置 let不可重复声明 存在块级作用域 IIFE的替换 暂时性死区(TDZ):...

  • var let const

    var 可声明前置 let不可声明前置 let不可重复声明 存在块级作用域 暂时性死区(TDZ):在let声明变量...

  • 一、块级作用域绑定

    var声明及变量提升机制 在预编译阶段js引擎会将上面函数修改成下面这样 块级声明 临时死区(TDZ) //循环中...

  • ES6笔记

    let命令: 用来声明变量 不存在变量提升,所声明的变量必须声明后才能调用,否则报错 暂时性死区(TDZ)在代码块...

  • ES6新增

    1.变量声明let和const 代码块内有效 不存在变量提升 暂时性死区,简称TDZ 不允许重复声明 const一...

网友评论

      本文标题:什么是TDZ?

      本文链接:https://www.haomeiwen.com/subject/sngnbttx.html