ES6笔记 -- 变量/语句声明

关于变量声明

  • let的作用是声明一个作用域为某个代码块({})的变量(称为块级作用域)
  • let不允许变量提升(注: 变量的使用在声明之前)
  • 块级作用域里的let命令之前的区域称之为'暂时性死区', 这意味着死区内即使是typeof操作也会出错
  • let不允许在相同的作用域内重复声明同一个变量, 值得一提的是, for循环语句的循环体是独立的子作用域, 而循环语句部分(括号内语句)是其父作用域, 这意味着循环语句和循环体内可以定义相同名称的变量

关于函数声明

function f () { console.log('outside') }(function () {if (false) { function f () { console.log('inside') } }f() // inside
}())
  • ES5 中的函数声明只允许在全局或函数作用域内, 但是浏览器为了兼容旧代码, 允许在犹如if的代码块内声明, 此时, 函数将会被提升到函数头部, 相当于
  function f () { console.log('outside') }(function () {function f () { console.log('inside') }if (false) { }f() // inside}())
  • 而在 ES6 中则相当于(暂时不提原因)
  function f () { console.log('outside') }(function () {var f = undefinedif (false) { function f () { console.log('inside') } }f() // error}())
  • 要想 ES6 在块作用域内声明函数需使用let声明函数表达式, 如
  {if (false) {let f = function () {}}}// 注意, 代码块必须在大括号内if (false) let f = function () {} //error

关于常量声明

  • 使用const命令声明一个只读的常量, 一旦声明, 常量的值就不能改变
  • 由于常量不能改变, 所以在声明时必须初始化
  • const命令也存在块级作用域
  • const命令声明的常量也存在暂时性死区
  • const命令声明的常量同样不能重复声明
  • 声明对象/数组常量时, 需要注意的是, 对象的指针地址不能改变(即该常量不能指向新的对象), 但是其对象本身是可以改变的, 如添加和删除属性,如果要将对象冻结, 则使用Object.freeze方法, 对象本身和属性都被冻结

顶层对象与全局变量

  • 浏览器环境下, 顶层对象是window, node 中顶层对象是global对象.
  • ES5 中, 顶层对象和全局变量是等价的, 这种情况下, 会出现很多问题, 比如顶层对象的属性导出可以读写, 这不利于模块化编程.
  • ES6 规定 let, const, class命令声明的全局变量不再等于顶层对象
  • ES5 顶层对象还存在一个问题, 由于各种环境中(浏览器, Web Woker, Node等)的顶层对象不统一, 而使用this变量又存在局限性(如Node和ES6模块中, this返回的是当前模块), 在想取得顶层对象时需要添加判断条件(这里不赘述)

转载于:https://www.cnblogs.com/xvvx/p/10273986.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] vue的属性名称与method的方法名称一样时会发生什么问题?

[vue] vue的属性名称与method的方法名称一样时会发生什么问题? 键名优先级:props > data > methods个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

括号序列

题目描述 一个由小括号组成的字符串可以被称为一个括号序列。但一个括号序列可能并不满足括号匹配的要求。因此,我们可以进一步将满足括号匹配的括号序列成为“标准的括号序列。例如字符串")((())"是一个括号序列但不是标准的括号序列,而字符串…

[vue] vue变量名如果以_、$开头的属性会发生什么问题?怎么访问到它们的值?

[vue] vue变量名如果以_、$开头的属性会发生什么问题?怎么访问到它们的值? 报错 变量未定义 以 _ 或 $ 开头的属性 不会 被 Vue 实例代理,因为它们可能和 Vue 内置的属性、API 方法冲突。 你可以使用例如 $data.xxx或者_data.xxx 的方式访问…

[vue] vue使用v-for遍历对象时,是按什么顺序遍历的?如何保证顺序?

[vue] vue使用v-for遍历对象时,是按什么顺序遍历的?如何保证顺序? image 1、会先判断是否有iterator接口,如果有循环执行next()方法 2、没有iterator的情况下,会调用Object.keys()方法,在不同浏览器中&…

[vue] vue如果想扩展某个现有的组件时,怎么做呢?

[vue] vue如果想扩展某个现有的组件时,怎么做呢? 不对原组件进行更改的:使用Vue.extend直接扩展使用Vue.mixin全局混入HOC封装个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大…

typescript在ES3(IE7)环境下使用async、await

因为公司产品需要搞个Web App,但是又需要兼容IE7,这时候整个应用会非常复杂,尤其是在处理异步的时候,在我的选择中有两个方案 callback方案async/await经过衡量以后,决定使用async/await方案 配置typescript环境 $ mkd…

与歌谣通关前端面试题【CSS篇汇总目录】

我是歌谣 放弃很容易 但坚持一定很酷 欢迎 关注公众号小歌谣一起讨论前后端知识 CSS汇总 【CSS】 [css] 圣杯布局和双飞翼布局的理解和区别,并用代码实现 [css] CSS3有哪些新增的特性? [css] 在页面上隐藏元素的方法有哪些? [css] CSS选…

【LeetCode】按 tag 分类索引 (900题以下)

链表:https://www.cnblogs.com/zhangwanying/p/9797184.html (共34题) 数组:https://www.cnblogs.com/zhangwanying/p/9610923.html (共139题) 树:https://www.cnblogs.com/zhangwanying/p/67…

一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0

一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0 想下载Google code中的源码 不需要装各种软件,只需要一个小工具即可! 如何使用? 访问一个谷歌开源项目网站,比如:https://code.google.com/p/deguang-ticke…

[vue] v-on可以绑定多个方法吗?

[vue] v-on可以绑定多个方法吗&#xff1f; <input type"text" :value"name" input"onInput" focus"onFocus" blur"onBlur" />个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

[NOI2018]你的名字

SAM写的太不熟练了~~SAM上的线段树合并也不熟练~~~ 调了半天样例 题目大意&#xff1a; 给定一个S&#xff0c;Q次询问&#xff0c;每次给出T&#xff0c;l,r, 求对于S[l,r]&#xff0c;属于T的子串却不属于S[l,r]的子串有多少个 看上去挺简洁的一个问题。。。 暴力68pts 对于S…

Visual.Assist.X.V10.7.1940的汉化破解补丁

Visual Assist X V10.7.1940的汉化破解补丁&#xff0c;方便各位朋友。 从该版本开始&#xff0c;本博客会跟踪升级&#xff0c;请留意。 关于菜单的汉化请看&#xff1a;http://blog.csdn.net/afu45/article/details/9145293 汉化方法 先安装英文原版软件。下载地址&#…

此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址随便造成的。请稍候重试。 .

vs提示“此时无足够的可用内存&#xff0c;无法满足操作的预期要求&#xff0c;可能是由于虚拟地址随便造成的。请稍候重试。” 下载下面的补丁就可以了 . 下载地址&#xff1a; http://download.csdn.net/detail/afu45/4053280

java目录

阅读目录&#xff1a; 0.Java下载安装1.HelloWorld2.Java语言基础&#xff1a;关键字3.Java语言基础&#xff1a;表示符4.Java语言基础&#xff1a;注释5.Java语言基础&#xff1a;常量和变量6.Java语言基础&#xff1a;运算符7.Java语言基础&#xff1a;语句8.Java语言基础&am…

HDU-2112-HDU Today

这题的话&#xff0c;坑点挺多的&#xff0c;我也WA了好几次。 首先&#xff0c;对于map&#xff0c;因为是多次使用&#xff0c;所以每次处理完一个图之后就要清空。 其次&#xff0c;就是对于DIjkstra跑图的时候&#xff0c;如果这个图是连通图的话&#xff0c;我们每次选取最…

Visual.Assist.X 菜单汉化

在Visual Studio 2010下 使用 Visual.Assist.X.V10.7.1940汉化破解补丁 之后&#xff0c; 细心的朋友会发现&#xff1a;Visual Studio的菜单内还是英文的。其实这个也是可以汉化的&#xff0c;方法如下&#xff1a; 在Microsoft Visual Studio的菜单上右键单击 -》 选择最后…

[vue] 说说你对vue的template编译的理解?

[vue] 说说你对vue的template编译的理解&#xff1f; 将template里的组件编译成虚拟dom个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Visual.Assist.X.V10.7.1946的汉化破解补丁

Visual Assist X V10.7.1946的汉化破解补丁&#xff0c;方便各位朋友。 本博客会跟踪升级&#xff0c;请留意。 关于菜单的汉化请看&#xff1a;http://blog.csdn.net/afu45/article/details/9145293 汉化方法 先安装英文原版软件。下载地址&#xff1a;http://www.wholeto…

[vue] axios是什么?怎样使用它?怎么解决跨域的问题?

[vue] axios是什么&#xff1f;怎样使用它&#xff1f;怎么解决跨域的问题&#xff1f; axios 的是一种异步请求&#xff0c;用法和ajax类似&#xff0c;安装npm install axios --save 即可使用&#xff0c;请求中包括get,post,put, patch ,delete等五种请求方式&#xff0c;解…

iOS 10 之后权限设置

iOS 10 之后权限设置 麦克风权限&#xff1a;Privacy - Microphone Usage Description 是否允许此App使用你的麦克风&#xff1f; 相机权限&#xff1a; Privacy - Camera Usage Description 是否允许此App使用你的相机&#xff1f; 相册权限&#xff1a; Privacy - Photo Libr…