在ES6中,js首次引入了块级作用域的概念,而什么是块级作用域?

众所就知,在js当中存在预解析的概念,就是变量提升。并且只存在全局作用域和私有作用域。在全局定义的变量就是全局变量,而在函数内部定义的变量称为私有变量。而在if判断和for循环之类的都是全局变量。

而块级作用域,就是在一个作用域中,该变量只能在声明后才能使用,并且该变量只在该作用域有效。

而let给js带来了块级作用域    那么我们就细讲一下let

 //块级作用域的变量只能在块级作用域有效,否则报错
{
var a=2;
let b=3;
}
console.log(a); //
console.log(b);//Uncaught ReferenceError: b is not defined
 //块级作用域变量不能重复声明变量
{
let a;
let a;
}
//会出现 Identifier 'a' has already been declared
 //块级作用域只能在声明赋值后才能使用
{
let a=b; //b还没有声明赋值
let b=10
}
// Uncaught ReferenceError: b is not defined
 var arr=[];
for(let i=0;i<10;i++){
arr[i]=function(){
return i
};
}
console.log(arr[3]()); //3 如果用var的话 肯定就是10 啦
 //在块级作用域中  for分父级作用域与子级作用域
for(let i=0;i<10;i++){
let i='123';
console.log(i); //打印10次 123 在同一块级作用域下是不能重复声明的 所以 ()与{} 在不同作用域
}

那ok   let就先结束了。

const是用来声明常量的,感觉js越来与后端语言靠近

我们都知道常量的值是不允许改变的,但是我们不能简单的理解内容不能改变,在js中,对象都是引用类型,而const在声明一个对象常量的时候,他存储的是这个对象的地址,只要这个地址不改变,const就不会报错,至于在地址存储的什么东西,那就跟const就没有太大关系了  比如:

 const obj={
name:'xuwen'
}
obj.age=27;
console.log(obj);//Object {name: "xuwen", age: 27}

同样,const声明一个变量也给js带来了块级作用域,比如说块级作用域只在作用域里面才有效,比如块级作用域不能重复声明变量 ,比如作用域变量只能在声明后才能使用这些上面都提到过就不重复了。

ok,结束const

那么我们再说一下顶层对象的属性

在ES6之前,顶层对象的属性和全局变量是等价的。

顶层对象在浏览器中指的就是window对象  在node里面就是global对象

 //我们在全局作用域下   使用一个  a=10   相当于window.a=10

那么我们现在是ES6时代了,当然是有所改变的

我们在用  let   const  class声明变量的时候不再属于顶层对象了

let a=10
window.a //undefined

至于node当中的global对象    哎,其实我也不是特别的熟悉。顶层对象的不同肯定会导致兼容性的问题的,至于如何解决,以后再说吧。

最新文章

  1. Curator leader 选举(一)
  2. php模拟数据库常用操作效果
  3. ajax 参数有中文
  4. linux 配置 tomcat 自动发布脚本
  5. JavaScript实现联想校招员工信息展示
  6. php之aop实践
  7. centos升级支持到C++11, gcc4.8.2
  8. HTML模仿桌面
  9. centOS 多网卡 启动网络 eth0 does not to be present
  10. .net通用权限框架B/S (五)--WEB(3)组织机构
  11. java NIO详解
  12. mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
  13. Python 的 urllib.parse 库解析 URL
  14. Springboot集成FreeMarker
  15. for循环、while循环、break、continue、exit
  16. RANSAC
  17. 清除redis缓存
  18. 2.Python list_常用方法总结
  19. saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
  20. 个人理解的Windows漏洞利用技术发展史

热门文章

  1. jmeter读取文件进行参数化时随机取值实现
  2. 用ElasticSearch搭建自己的搜索和分析引擎
  3. 利用 force recovery 解决服务器 crash 导致 MySQL 重启失败的问题
  4. Python 基础三 文件 函数
  5. linux 下创建管理员权限账户
  6. 仿淘宝左侧菜单导航栏纯Html + css 写的
  7. 蓝桥杯-凑算式-java
  8. [luoguP2912] [USACO08OCT]牧场散步Pasture Walking(lca)
  9. 一个使用openGL渲染的炫丽Android动画库
  10. Start to write blogs 【开始写博客】