react native: js语法 let命令和const命令

作者: wg689 | 来源:发表于2017-12-27 23:12 被阅读76次

一) let命令

ES6新增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声明的变量,只在 let 命令所在的代码块内有效。
let 声明的变量只在它所在的代码块有效。
下面的代码如果使用 var ,最后输出的是10。

for (var i = 0; i < 10; i++) {
a[i] = function () { console.log(i);
}; }
a[6](); // 10

上面代码中,变量 i 是 var 声明的,在全局范围内都有效。所以每一次循环,新的 i 值都会覆盖旧值,导致最后输出的是 最后一轮的 i 的值。

不存在变量提升

不存在变量提升

暂时性死区

只要块级作用域内存在 let 命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError let tmp;
}

总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone, 简称TDZ)。

这样的设计是为了让大家养成良好的编程习惯,变量一定要在 声明之后使用,否则就报错。
总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的 那一行代码出现,才可以获取和使用该变量。

不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。
因此,不能在函数内部重新声明参数。

// 报错 function () {
let a = 10;
let a = 1; }

二) 块级作用域

ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。
第一种场景,内层变量可能会覆盖外层变量。

var tmp = new Date();
function f() { console.log(tmp); if (false) {
var tmp = "hello world"; }
}
f(); // undefined

上面代码中,函数f执行后,输出结果为 undefined ,原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量。

第二种场景,用来计数的循环变量泄露为全局变量。

ES6的块级作用域

let 实际上为JavaScript新增了块级作用域

{{{{{let insane = 'Hello World'}}}}};

上面代码使用了一个五层的块级作用域。外层作用域无法读取内层作用域的变量。
内层作用域可以定义外层作用域的同名变量。

{{{{
let insane = 'Hello World'; {let insane = 'Hello World'} // 不报错
}}}};

ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。

'use strict'; if (true) {
function f() {} }
f(); // ReferenceError: f is not defined

上面代码中,函数 f 是在块级作用域内部声明的,外部是不可用的。

二) const命令

const命令
对于const来说,只声明不赋值,就会报错。同样的,这行命令在常规模式下不报错,但 foo 以后也没法重新 赋值了。

const的作用域与let命令相同:只在声明所在的块级作用域内有效。

var a = 1;
// 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined

上面代码中,全局变量 由 命令声明,所以它是全局对象的属性;全局变量 b 由 let 命令声明,所以它不是全局对
象的属性,返回 undefined

相关文章

  • react native: js语法 let命令和const命令

    一) let命令 ES6新增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声明的变量,只在 le...

  • ES6的let 和 const 命令

    let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...

  • 2018-06-25

    一、let命令 es是标准,js是实现let和var的区别:let只存在所在的作用域中 二、const命令 常量命...

  • let和const

    新的赋值语句let和const let和const命令

  • 重读 ES6(一)

    一、let 和 const 命令 let 命令 let 与 var 的区别:let 声明的变量只在 let 命令所...

  • es6常用语法(一)

    let 和 const 命令 let 命令 只在let命令所在的代码有效 let命令,用来声明变量。它的用法类似于...

  • ES6基础入门

    变量 let 命令 const 命令 函数

  • ECMAScript 6 入门

    1.let 和 const 命令 let 命令 基本用法 ES 6 新增了 let 命令,用来声明变量,它的用法类...

  • ES6之 let 和 const 命令

    ES6 之 let 和 const 命令 1、let 命令 1.1、基本用法 ES6 新增了let命令,用来声明变...

  • ES6需要记忆理解的地方

    let和const命令 1、let和const均无变量提升。2、let变量指向的地址可变,const指向的地址不可...

网友评论

    本文标题:react native: js语法 let命令和const命令

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