因为习惯用var声明变量,以至于ES6出了let来替代var,我依然继续用var,直到后来慢慢了解let之后,开始尝试使用

    不同点:

      ①:var属于ES5规范,let属于ES6规范

     ②:var有预处理机制,let没有。预处理机制也就是常说的声明提前

      声明提前:不管变量被声明在函数什么位置,所有变量声明都会被提升至函数顶部(变量声明指 var a; 即声明还未赋值)

           比如声明变量a并赋值为1,即 var a = 1;  则 var a;会被提升至函数顶部 (只是a被提前,a的值1不会被提前)

      注:1. 在声明变量时一定要初始化 ,初始化指 var a = 1; (声明并赋值 

        2. 即使在函数内部,声明变量时一定要加上var,不要只写 a = 1; 否则变量a会自动升为全局变量

    

  下面立即函数执行后,控制台不会打印出1,而是undefined,因为只有声明被提前,值没有

  <script>
(function() {
console.log(a);
var a = 1;
})()
</script>

   下面立即执行函数执行后,控制台不会打印出1undefined,而是报错,因为let声明的变量不会被提前

  <script>
(function() {
console.log(a);
let a = 1;
})()
</script>

  

    ③:作用域的不同,var是全局作用域,let是块级作用域

    下面代码控制台会打印出1 

  <script>
if(true) {
var a = 1;
}
console.log(a);
</script>

    下面代码控制台不会打印出1,会报错,提示a没有定义(let定义的变量只在{}里才能访问到)

  <script>
if(true) {
var let = 1;
}
console.log(a);
</script>

      

最新文章

  1. 嵌入式Linux系统开发环境搭建
  2. 手机开发必备技巧:javascript及CSS功能代码分享
  3. GridView 下拉搜索
  4. Struts BaseAction工具类,封装Session,Request,Application,ModelDriven
  5. JS页面间传值
  6. SQL2012 附加数据库提示5120错误解决方法
  7. BZOJ2091: [Poi2010]The Minima Game
  8. [React] React Router: setRouteWillLeaveHook
  9. objective-C Ⅱ
  10. PLSQL实现分页查询
  11. es6拼接字符串``
  12. AI算法第一天【概述与数学初步】
  13. laravel代码生成器的记录
  14. SVM学习笔记4-核函数和离群点的处理
  15. Delphi数学运算当中四舍五入的问题
  16. 对象克隆技术Object.clone()
  17. Cocos2d-X开发中国象棋《二》project文件概述
  18. 单例模式与静态变量在PHP中 (转载)
  19. linux shell学习二
  20. hdu 5202(DFS)

热门文章

  1. Spring Security 教程 大牛的教程
  2. PLSQL 12 安装、连接Oracle
  3. Model赋值返回json
  4. [20190510]rman备份的疑问7.txt
  5. [Go] gocron源码阅读-flag包实现命令行参数获取
  6. 渗透测试学习 二十三、常见cms拿shell
  7. 第十章 Centos7-系统进程管理
  8. MASK-RCNN(1)
  9. CUDA -- 规约求矩阵的行和
  10. 借助meta影藏顶部菜单