var

console.log(a) // undefinedvar a = 1

从上述代码中我们可以发现,虽然变量还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做提升,并且提升的是声明。
对于这种情况,我们可以把代码这样来看

var aconsole.log(a) // undefined

a = 1

接下来我们再来看一个例子

var a = 10var aconsole.log(a)
对于这个例子,如果你认为打印的值为undefined那么就错了,答案应该是10,对于这种情况,我们这样来看代码var avar aa = 10console.log(a)
到这里为止,我们已经了解了var声明的变量会发生提升的情况,其实不仅变量会提升函数也会被提升。
console.log(a) // ƒ a() {}function a() {}var a = 1
对于上述代码,打印结果会是ƒ a() {},即使变量声明在函数之后,这也说明了函数会被提升,并且优先于变量提升。
说完了这些,想必大家也知道var存在的问题了,使用var声明的变量会被提升到作用域的顶部。

接下来我们再来看letconst

 1 var a = 1
 2 let b = 1
 3 const c = 1
 4 console.log(window.b) // undefined
 5 console.log(window. c) // undefined
 6
 7 function test(){
 8   console.log(a)
 9   let a
10 }
11 test()

首先在全局作用域下使用letconst声明变量,变量并不会被挂载到window上,这一点就和var声明有了区别。
再者当我们在声明a之前如果使用了a,就会出现报错的情况, a is not defined

首先报错的原因是因为存在暂时性死区,我们不能在声明前就使用变量,这也是letconst优于var的一点。然后这里你认为的提升和var的提升是有区别的,虽然变量在编译的环节中被告知在这块作用域中可以访问,但是访问是受限制的

总结

  • 函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部
  • var存在提升,我们能在声明之前使用。letconst因为暂时性死区的原因,不能在声明前使用
  • var在全局作用域下声明变量会导致变量挂载在window上,其他两者不会
  • letconst作用基本一致,但是后者声明的变量不能再次赋值

    2019-03-02  19:28:08

 

转载于:https://www.cnblogs.com/chailuG/p/10462526.html

var、let 及 const 区别相关推荐

  1. JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)

    JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...

  2. ES6——let、const和var的用法和区别

    ES6 新增了let命令,用来声明变量,新增了const命令,用来声明常量,它们的用法类似于var. let a = 1; var b = 2; const PI = 3.14; 主要区别 块级作用域 ...

  3. css里面的let,js中let和var定义变量的区别

    javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...

  4. var 和 let的区别_let 和 var的区别

    js定义变量前言 1.js 定义变量 使用 var 或者let 2.js定义常量 使用 const 3.var 定义变量是用js语言诞生就有的: let定义变量是从ES6新语法开始的. 4.let定义 ...

  5. JS中var和let的区别

    var和let的区别: 区别: 1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 3.let不允 ...

  6. JS红书宝--var,let和const声明变量

    var,let和const声明变量 var 声明 var声明作用域 function test() { var message = "hi"; // 局部变量 } test(); ...

  7. const int 和INT const区别

    const int 和INT const区别 2010-04-09 23:26 const int a = 5; int const b = 6; 没区别 指针的时候有区别,引用也有区别 指针的话 1 ...

  8. var和dynamic的区别及如何正确使用dynamic?

    1.var与dynamic的区别   C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,但其实它们是有本质的区别的.var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的 ...

  9. ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数

    ES6简介 ES全称:ECMAScript ; 由ECMA国际化组织制定的标准脚本语言的标准化规范: 为什么使用ES6? 每一次标准的诞生都意味着语言的完善,功能的加强,JavaScript语言本身也 ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之隐写
  2. 突发奇想写的一篇小科幻(如果可以叫做科幻的话)
  3. 如何定位和处理手机游戏内存泄露
  4. 爱说说技术原理:前后台参数约定及逻辑代码(三)
  5. Windows路由表
  6. oracle cdc 关闭,Oracle CDC部署流程
  7. abaqus生成adams柔性体_1:ABAQUS有限元分析-ABAQUS软件介绍
  8. 必备读论文的黑科技!错过后悔!
  9. python获取代码当前行数_Python实验室一段日志代码,获取当前调用的函数名和行号...
  10. C++ 堆栈结构(超详解)
  11. Hibernate简介与运行原理
  12. 支持移动触摸的jQuery图片Lightbox插件
  13. 图文详解win7实现局域网共享文件
  14. Java练习题_通过2月天数来判断平年闰年
  15. 空间里相片批量导入u盘_怎样将U盘内相片弄到QQ空间的相册内
  16. 协调才暴力-精英乒乓论坛
  17. 自定义权限修改弹框_微信小程序自定义授权弹框
  18. 中银泰定期存款理财技巧
  19. iOS开发 xcode8 和 ios10 的那些坑
  20. 【JavaScript】阶段性复习

热门文章

  1. Kubernetes本地集群和Google Kubernetes Engine的区别
  2. mysql秒级平滑_DDM实践:数据库秒级平滑扩容方案
  3. deepin系统中.txt文件图标显示内容问题_deepin从兴致勃勃到彻底放弃
  4. UE4学习-在虚幻编辑器中打开VS的三种方式
  5. IntelliJ IDEA 使用Maven工具 (新手入门简单操作,maven的下载,安装,配置)
  6. shell编程最新总结大全
  7. java 线程交替输出,[java]java经典问题之线程交替打印数字
  8. TIMING_02 浅谈时序约束与时序分析
  9. 昆明理工计算机科学,昆明理工大学的计算机
  10. linux msleep 头文件,Linux延迟函数