let 命令
/** let 代码块有效 不存在变量提升* */ // let i = "全局"; var i = "va";//同时使用var let /let let/ 声明i变量 Identifier 'i' has already been declared /var var不存在 for(let i = 0; i<3; i++){ //i变量在父级作用域 console.log(i);//1,2,3 } for(let i = 0; i<3; i++){ let i = "abc"; // i 变量在子级作用域 且绑定此作用域,不再受外部影响 console.log(i);//abc 3次 } console.log(i); //
暂时性死区
{/** 暂时性死区,* 解决:先定义在使用*/// tmp = "TDZ" //ReferenceError: not defined => 暂时性死区 // console.log(tmp); //ReferenceError: not defined => 未被定义 let tmp ; // let存在,即绑定该作用域,tmp在let声明之前不可用 console.log(tmp); //undefined => 缺少值 tmp = "TDZ 结束"; console.log(tmp); //TDZ 结束 // 暂时性死区 =>}
typeof命令 数据类型
{ console.log( typeof (123), //number typeof ("123"), //string typeof (x), //not defined typeof (true),//boolean typeof ({}), //object typeof (function () { //function return 123; }) ) let x; console.log(typeof (x)) // undefined }
{ /* * 块级作用域内声明函数,在支持es6的浏览器中会报错 * 在最顶级作用域中声明函数/ 函数表达式 禁用函数声明语句 * */ function f() { console.log("123"); } (function () { if(false){ function f() { console.log("==========="); } // f(); }; console.log(f); //undefined 变量提升 f(); })(); }
const 命令
{ /* * const 声明常量 不可变 * 指向内存地址 * */ const ttt = "常量"; // ttt = "变量";//Assignment to constant variable. // console.log(ttt); // const obj = {}; const obj = {}; //同时声明两个相同的对象 Identifier 'obj' has already been declared obj.name = "name"; console.log(obj); }
块级作用域任意嵌套
{ /** 块级作用域任意嵌套*支持es6的浏览器,块级作用域内函数声明提前* */ { let abc = "abcd"; console.log(abc); { let abc = "12374" console.log(abc) } } /* * es6中声明变量的六种方法 * var let function const class import * */}