var、let 及 const 区别
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声明的变量会被提升到作用域的顶部。
接下来我们再来看let
和const
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()
首先在全局作用域下使用let
和const
声明变量,变量并不会被挂载到window
上,这一点就和var
声明有了区别。
再者当我们在声明a
之前如果使用了a
,就会出现报错的情况, a is not defined
首先报错的原因是因为存在暂时性死区,我们不能在声明前就使用变量,这也是let
和const
优于var
的一点。然后这里你认为的提升和var
的提升是有区别的,虽然变量在编译的环节中被告知在这块作用域中可以访问,但是访问是受限制的
总结
- 函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部
var
存在提升,我们能在声明之前使用。let
、const
因为暂时性死区的原因,不能在声明前使用var
在全局作用域下声明变量会导致变量挂载在window
上,其他两者不会let
和const
作用基本一致,但是后者声明的变量不能再次赋值2019-03-02 19:28:08
转载于:https://www.cnblogs.com/chailuG/p/10462526.html
var、let 及 const 区别相关推荐
- JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...
- ES6——let、const和var的用法和区别
ES6 新增了let命令,用来声明变量,新增了const命令,用来声明常量,它们的用法类似于var. let a = 1; var b = 2; const PI = 3.14; 主要区别 块级作用域 ...
- css里面的let,js中let和var定义变量的区别
javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...
- var 和 let的区别_let 和 var的区别
js定义变量前言 1.js 定义变量 使用 var 或者let 2.js定义常量 使用 const 3.var 定义变量是用js语言诞生就有的: let定义变量是从ES6新语法开始的. 4.let定义 ...
- JS中var和let的区别
var和let的区别: 区别: 1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 3.let不允 ...
- JS红书宝--var,let和const声明变量
var,let和const声明变量 var 声明 var声明作用域 function test() { var message = "hi"; // 局部变量 } test(); ...
- const int 和INT const区别
const int 和INT const区别 2010-04-09 23:26 const int a = 5; int const b = 6; 没区别 指针的时候有区别,引用也有区别 指针的话 1 ...
- var和dynamic的区别及如何正确使用dynamic?
1.var与dynamic的区别 C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,但其实它们是有本质的区别的.var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的 ...
- ES6/06/ES6简介,ES6新增语法,let声明变量,const声明常量,var,let和const总结,数组解构,对象解构,箭头函数,剩余参数
ES6简介 ES全称:ECMAScript ; 由ECMA国际化组织制定的标准脚本语言的标准化规范: 为什么使用ES6? 每一次标准的诞生都意味着语言的完善,功能的加强,JavaScript语言本身也 ...
最新文章
- 2021年中国工业互联网安全大赛核能行业赛道writeup之隐写
- 突发奇想写的一篇小科幻(如果可以叫做科幻的话)
- 如何定位和处理手机游戏内存泄露
- 爱说说技术原理:前后台参数约定及逻辑代码(三)
- Windows路由表
- oracle cdc 关闭,Oracle CDC部署流程
- abaqus生成adams柔性体_1:ABAQUS有限元分析-ABAQUS软件介绍
- 必备读论文的黑科技!错过后悔!
- python获取代码当前行数_Python实验室一段日志代码,获取当前调用的函数名和行号...
- C++ 堆栈结构(超详解)
- Hibernate简介与运行原理
- 支持移动触摸的jQuery图片Lightbox插件
- 图文详解win7实现局域网共享文件
- Java练习题_通过2月天数来判断平年闰年
- 空间里相片批量导入u盘_怎样将U盘内相片弄到QQ空间的相册内
- 协调才暴力-精英乒乓论坛
- 自定义权限修改弹框_微信小程序自定义授权弹框
- 中银泰定期存款理财技巧
- iOS开发 xcode8 和 ios10 的那些坑
- 【JavaScript】阶段性复习
热门文章
- Kubernetes本地集群和Google Kubernetes Engine的区别
- mysql秒级平滑_DDM实践:数据库秒级平滑扩容方案
- deepin系统中.txt文件图标显示内容问题_deepin从兴致勃勃到彻底放弃
- UE4学习-在虚幻编辑器中打开VS的三种方式
- IntelliJ IDEA 使用Maven工具 (新手入门简单操作,maven的下载,安装,配置)
- shell编程最新总结大全
- java 线程交替输出,[java]java经典问题之线程交替打印数字
- TIMING_02 浅谈时序约束与时序分析
- 昆明理工计算机科学,昆明理工大学的计算机
- linux msleep 头文件,Linux延迟函数