es6暂时性死区

function bar(x = y, y = 2) {
  return [x, y];
}

bar();


理解
bar(x = y, y = 2) 存在声明顺序

先声明x= y

这时y还未声明

所以会报错

时间: 2024-11-05 06:27:41

es6暂时性死区的相关文章

ES2015中let的暂时性死区(TDZ)

Tomporal Dead Zone (TDZ)是ES2015中对作用域新的专用定义.是对于某些遇到在区块作用域绑定早于声明语句时的情况.Tomporal Dead Zone (TDZ)可以理解为时间上无法达到的区域,简称“时间死区”或者“暂时死区”. 请思考下面代码,结果会是神马? 1 console.log(a); 2 var a = 12; 如果你了解变量预编译过程,变量提升,那么很容易就会知道,这段代码相当于: 1 var a; 2 console.log(a); 因此,会输出undef

闭包和高阶函数

小知识: var test3={ a:'asd'}console.log(test3['a']); Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 相当于给数组的原型添加全局方法 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ 5 var arr = []; 6 for(var i = 0,len = s

ES6之块级作用域

一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一术语--“变量提升(hoisting)”. 如下: function func(){ console.log(test); var test = 1; }; func(); 在node环境执行上述代码,结果为: 之所以为’undefined’,原因就在于‘变量提升’,在进入func函数时,将所有通过

JavaScript学习笔记 -- ES6学习(二) let 和const

ES6 中新增了两个命令: let 和const. let命令: let 用于声明变量,和var 类似,但是所声明的变量只在代码块中有效,不存在变量提升,有暂时性死区. 1.只在代码块中有效 和var 命令不同的是,let 声明的变量只在代码块中有效,例如 { let a = 1; var b = 2; } console.log(b); // print 2; console.log(a); // this will cause error. 2. 不存在变量提升 所谓变量提升,就是在同一作用

ES6之let(理解闭包)和const命令

ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,ECMAScript 6即ES6是ECMAScript的第五个版本,因为在2015年6月正式发布,所以又成为ECMAScript2015.ES6的主要目的是为了是JS用于编写复杂的大型应用程序,成为企业级的开发语言. 说明:由于有时候我们希望得知es6代码的具体实现原理或者说希望能够转化为es5使用,

ES6 知识摘要

let和const命令 1.let命令 let 只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 for (let i = 0; i < arr.length; i++) {} console.log(i); //ReferenceError: i is not defined var a = []; for (var i = 0; i < 10; i++) {

ES6(二) let const

一:let 1.块级作用域 外层作用域无法读取内层作用域的变量. 2.不存在变量提升 3.TDZ:暂时性死区 "暂时性死区"也意味着typeof不再是一个百分之百安全的操作. 这样的设计是为了让大家养成良好的编程习惯,变量一定要在声明之后使用,否则就报错. 变量没声明和声明不赋值,返回的都是undefined. 总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量. 4.不允许重复声明 5.

ES6学习笔记第二章

let 和 const命令 1 let命令 用法: ES6新增let命令,用于声明变量,用法类似var,只是let声明的变量是块级作用域内有效 例: { let a = 10; var b = 1; } a // a is not defined b // 1 根据返回值可以看出,let声明变量时的作用域只在其代码块内 for 循环的计数器就很适合使用let来声明变量. var a = []; for (var i = 0; i<10; i++){ a[i] = function(){ cons

let和const====均参考阮大神的es6入门

// 解构复制// let [foo,[[bar],baz]] = [1,[[2],3]];// console.log(foo);//1// console.log(bar);//2// console.log(baz);//3 // let [,,third] = ["foo","bar","baz"];// console.log(third)//baz; // let [x,,y] = [1,2,3];// console.log(x+&