资讯专栏INFORMATION COLUMN

es6学习之let和const命令

DrizzleX / 2032人阅读

摘要:和命令命令是在它所在的代码块有效,它属于块级作用域,新增。只有全局作用域和函数作用域。

let和const命令

let命令是在它所在的代码块有效,它属于块级作用域,es6新增。es5只有全局作用域和函数作用域。let命令存在暂时性死区(TDZ),即在申明前使用就会报错,不存在变量提升

console.log(a); // 报错
let a = 111;

==let不允许在相同作用域中,重复申明同一变量==

块级作用域和函数声明

es6中明确规定在块级作用域中可以声明函数,在块级作用域中,函数声明语句的行为类似于let,在块级作用域外不可引用。以下是es6中对函数声明做的规定

允许在块级作用域内声明函数。

函数声明类似于var,即会提升到全局作用域或函数作用域的头部。

同时,函数声明还会提升到所在的块级作用域的头部。

看下面一段代码

// ES6 环境
function f() { console.log("I am outside!"); }
(function () {
  if (false) {
    function f() { console.log("I am inside!"); }
  }

  f();
}());

// Uncaught TypeError: f is not a function

会报错,应该块级作用域中的函数声明类似于var,会被提升到块级作用域头部,下面是实际运行代码

//ES6 环境
function f() { console.log("I am outside!"); }
(function () {
    var f = undefined;
  if (false) {
    function f() { console.log("I am inside!"); }
  }

  f();
}());
// Uncaught TypeError: f is not a function

所以要避免在块级作用域中声明函数,如果必须的话使用函数表达式

const命令

const 声明一个只读的常量,声明后不可改变,需要注意的是const只是保证声明的变量指向的那块内存空间保存的数据不能改动,对于复合型数据(对象和数组),变量指向的内存地址,保存的是一个指向实际数据的指针,const 只能保证这个指针是固定的,指针指向的数据结构是可以变的,因此对象可以添加属性,数组可以添加数据,但是他们不能赋给另一个变量

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

es6中有六中声明变量的方法:var 命令和function 命令,letconst ,还有import 命令和class命令

es5中顶层对象和全局变量是挂钩的,全局声明的变量是顶层对象的属性,es6中let,const,class命令声明的全局变量不在是全局变量的属性

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103359.html

相关文章

  • ES6习之 -- letconst命令

    摘要:命令用来声明变量,它的用法类似,但是命令声明的变量只在所在的代码块中有效。不允许重复声明不允许在同一作用域声明两个相同的变量。对于内部的数据结构的变化是无法控制的。 let命令 用来声明变量,它的用法类似var,但是let命令声明的变量只在所在的代码块中有效。 { var a = 1; let b = 2; } console.log(a); // 1 con...

    marser 评论0 收藏0
  • ES6习之 -- Set数据结构

    摘要:类似于数组,但是中不存在重复元素。可以接受一个数组或者其他具有接口的数据结构作为参数从上面的代码可以看出有去重的功能。去重还有另一个方法将数据结构的数据转换成数组。清除实例的指定成员。返回一个布尔值,表示某个值是否在实例之中。 Set Set类似于数组,但是Set中不存在重复元素。Set可以接受一个数组(或者其他具有itarable接口的数据结构)作为参数 const set = ne...

    wawor4827 评论0 收藏0
  • ES6习之 -- 解构(使数据访问更便捷)

    摘要:数组的解构赋值规定允许按照一定模式,从数组和对象中提取值对变量进行赋值,我们称之为解构。的规则是,只要有可能导致解构的歧义,就不得使用圆括号。 数组的解构赋值 ES6规定:允许按照一定模式,从数组和对象中提取值对变量进行赋值,我们称之为解构。以前赋值只能直接指定值 let a = 1; let b = 2; let c = 3; ES6允许以下这种做法 let [a, b, c] = ...

    mrcode 评论0 收藏0
  • NodeAPI习之Buffer

    摘要:与字符编码通过指定的编码进制,可以在与普通的字符串之间转换。中文中文通常用于实例数组的排序。有点像方法合并截断为的长度,缺少的部分会用补充,是一个返回,是一个支持的字符编码返回,创建并返回一个形式的迭代器,如果与具有完全相同的字节就返回 Buffer 可以在TCP流或者文件系统操作等场景中处理二进制数据流。 Buffer实例类似于整数数组,但是Buffer大小固定、且在V8堆外分配物理...

    Integ 评论0 收藏0
  • node 核心模块习之 Buffer

    摘要:核心模块学习之何为在引入之前,没有能读取和操作二进制数据流的机制,作为引入,以便能和网络流文件流等进行交互。返回值写入的实际大小,没有足够的空间保存,只会写入一部分。返回值实际存入的字节数。参考文章一进阶核心模块常用使用总结 node 核心模块学习之Buffer 何为 Buffer 在ES6引入 TypeArray 之前,JS没有能读取和操作二进制数据流的机制,Buffer 作为 No...

    soasme 评论0 收藏0

发表评论

0条评论

DrizzleX

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<