一、var 的缺陷:var 只有全局作用域和函数作用域,没有块级作用域,除了在函数内部的变量默认都属于window

        var foo='hello';
fn=function(){
var foo='world'
}
fn();
console.log(foo);//hello
if(true){
var foo='bar'
}
console.log(foo);//bar

二、let 定义变量:ES6新增可以定义块级作用域,但是没有变量提升,必须先声明再使用,不能重复声明,主要是解决了var没有块级作用域的缺陷

        let foo='hello';
if(true){
let foo='bar';
if(true){
let foo='vue';
if(true){
// 也有块级作用域链
console.log(foo);//vue
}
console.log(foo);//vue
}
console.log(foo);//bar
}
console.log(foo);//hello

三、const 定义常量:也是ES6新增的可以定义块级作用域,用于定义常量,常量不允许修改,并且声明的同时必须赋值,也没有变量提升,不允许重复声明,并且const比let的效率高

        const foo='hello';
if(true){
const foo='bar';
if(true){
const foo='vue';
if(true){
// 也有块级作用域链
console.log(foo);//vue
}
console.log(foo);//vue
}
console.log(foo);//bar
}
console.log(foo);//hello

四、使用建议:不要使用var,使用let和const,如果你使用的这个成员,一次都没有变过,则使用const定义,如果至少变了一次,则使用let定义。

更多详细知识点,请参考ECMAScript 6 入门

最新文章

  1. 探索逻辑事务 TransactionScope
  2. 敏捷开发Scrum
  3. oracle 空间大小查询
  4. Three.js基础探寻九——网格
  5. Illegal mix of collations (big5_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
  6. hdu 3635
  7. 在package.json中配置Script执行npm run tslint报错问题
  8. ios数据库FMDB
  9. 一些web编程能用到的小知识
  10. ios7新特性实践
  11. java BigDecimal的操作
  12. kloxo面板教程-折腾了一天
  13. Java GC算法 垃圾收集器
  14. 64bit program invoke 32bit library with rpcgen
  15. ORACLE 数据库使用正则表达式重新计算指定位置的数字为新的数字
  16. java时间日期类(Date、DateFormat、Calendar)学习
  17. p112 the podocyte
  18. Git使用五:回到过去
  19. Unity在WPF中的应用
  20. Linux shell 菜鸟学习笔记....

热门文章

  1. python安装pyautogui
  2. framework7 Autocomplete (自动完成) 具体使用
  3. 关于Java链接c#的webapi的注意事项
  4. pickle导入变量AttributeError的解决方案
  5. Jmeter websocket插件安装与使用
  6. codeforces#566(Div.2)B
  7. OpenSessionInViewFilter 的配置及替代方案
  8. MAC PHP7 如何disable xdebug
  9. Mac安装vscode IDE 撸nodejs代码
  10. Django之form主键