您的位置:首页 > 其它

【es6】【块级作用域 and const】

2018-01-17 16:51 344 查看

两种新增块级作用域的方式:

let为JavaScript新增了块级作用域:

function f() {

let a = 10;

if (true) {

let a = 5;

}

console.log(a);//会输出10,如a变量都是var定义的,则会是5

}

--------------------------------------

{{{

{let tmp = 'hello'}

console.log(tmp);//无法读取内层作用域中的变量

}}};

==========================

块级作用域内声明函数:

//声明语句
{
let a = 'hi';
function f () {
  return a;
}
}
----------------------避免在块级作用域内声明函数。如需要,也应该写成函数表达式
//表达式
{
let a = 'hi';
let f = function () {
  return a;
}
}
--------------------------
do 表达式-使块级作用域有一个返回值
本质上,块级作用域是一个语句,它没有返回值。
{

  let f = function () {

     return 1;

};

  let t = f();

  t = t * t + 1;

}

console.log(t);//获取不到,因为块级作用域不返回值,除非t是全局变量
-------------------------------
获取块级作用域值的一种方法:
{

  let f = function () {

     return 1;

};

  var t = f();//此处将t泄露为一个全局变量

  t = t * t + 1;

}

console.log(t);//可获取到--2

【提案--未实现--下个版本】  do 表达式:
let x = do {

  let f = function () {

     return 1;

};

  let t = f();

  t = t * t + 1;

}

console.log(x);//可获取到
=======================

const 声明一个只读的常量---不能改变。
 const 的作用域与let命令相同---只在其声明中的块级作用域内有效
还具有以下属性:
不提升;存在暂时死区;不可重复;只能在声明的位置后才能使用。
const并不能保证复合类型数据(对象和数组)的数据结构不可变,只能保证指针是固定的:
--------------------------
const a = [];
a.push('hi');//可执行
a.length = 0;//可执行
a = ['hello'];//报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  const