因为习惯用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>

      

var和let区别简述的更多相关文章

  1. Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述

    Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 一.HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 用Java ...

  2. JavaScript中const、var和let区别浅析

    在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...

  3. Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述

    Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述: 可能刚刚接触Xamarin的人来说,对于这个概念比较的模糊,认为这说的不都是同一个东西吗?事实并不是这样的 ...

  4. C#中泛型的解释(object,list,var,dynamic的区别)

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的 ...

  5. let、var、const区别(表格比较)

    let.var.const区别(表格比较): 区别项 let var const 作用域 块级作用域 全局作用域或函数作用域 块级作用域 是否有变量提升 无 有 无 是否可重复声明 不可 可以 不可 ...

  6. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  7. 有var和没有var的本质区别

    我们创建一个变量: var a = 100: 同时,大家也知道,就是不写var关键字也可以创建.在很多教程和说法中,将没有var 的这个名称称之为“全局变量”.如果我在全局直接写一个var abc = ...

  8. “var arr = []; ”和 “var arr = {};” 的区别

    1.面试题    var arr = [];    var arr = {};    比较上述代码有什么区别? 2.解析    var arr = [];是一个数组对象    var arr = {} ...

  9. JS定义函数的2种方式以及区别简述(为什么推荐第二种方式)

     无意中看到了阮一峰大神多年前的一篇博客: 12种不宜使用的Javascript语法    看到第9条的时候受到了启发,感觉之前没怎么理解清楚的一些问题好像突然就清晰了,如下图 可能光这样看,有些小伙 ...

随机推荐

  1. Springboot访问静态资源&WebJars&图标&欢迎页面

    目录 概述 1.访问WebJar资源 2.访问静态资源 3.favicon.ico图标 4.欢迎页面 概述 使用Springboot进行web开发时,boot底层实际用的就是springmvc,项目中 ...

  2. WPF 解决多个TreeViewItem同时触发某事件的简单方法

    原理是: 因为是双击事件,也就是同时引发了选择事件,TreeViewItem的IsSelected为True.通过触发器设置某个属性为特殊值,然后在CS页面的双击事件方法内判断是否此值即可. xaml ...

  3. centos7下mysql5.7的安装与配置

    centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...

  4. GO 数组

    一.数组(Array) 1.1 什么是数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. ...

  5. Nagios 钉钉报警

    第一章 创建钉钉应用(用于发送报警信息给单独某个用户) 打开钉钉管理后台: https://oa.dingtalk.com 创建成功后需要记录三个值"AgentID"," ...

  6. Redis Python(一)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ NoSQL(NoSQL=Not Only SQL),中文意思是非关系型数据库. 随着互联网Web2.0网站的兴起, ...

  7. 程序员编程时常用的mac快捷方式

    fn + F2/F3 = 调节音量 commend + shift +k = 显示或隐藏键盘 commend+shift +h = iPhone返回主页面 commend+ shift + hh = ...

  8. C++中的传值与传址

    在指针的传递中,也涉及到传值与传址的问题.下面通过一个函数进行说明. 代码如下: bool openBinary(uchar* buffer) { ; buffer = (uchar*)malloc( ...

  9. B/S架构与C/S架构(略讲)

    B/S架构基本概念 B/S是Browser/Server,即浏览器/服务器架构.Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现. B/S三层体系结构可以定义为 ...

  10. Jmeter之BeanShell

    在Jmeter中各种分类组件中都有相应的BeanShell组件,这里简单的说明一下Beanshell的使用. 一.概念 BeanShell是一种符合Java语法的脚本语言,也有自己的一些特定语法 二. ...