let 和 var 的区别
var 关键字
在块级作用域中使用var声明变量,外面同级的块级作用域也可以访问。if、switch、for 等语句的作用域都没有块级作用域,所以说,在这些语句中声明的变量都能被外界访问,这是非常不安全的。
function f() {
  if (true) { var x = 10; }
  console.log(x); // => 10
}
在 if 语句中通过var定义的变量,能够被外界访问。然而,在 Java 中是不允许的:

而 JavaScript 只有函数才能创建一个块级作用域,也可以用IIFE函数来创建一个块级作用域。
function f() {
  (function () { if (true) { var x = 10; } })();
  console.log(x); // => Uncaught ReferenceError: x is not defined
}
用IIFE函数创建块级作用域,if 语句在里面声明变量,在第 3 行中使用变量 x,报错了。
let 关键字
控制语句、条件语句的作用域不是块级作用域,所以var声明的变量可以穿透,导致变量冲突容易发生。ES6 新出的let和const关键字声明在这些语句中就能形成块级作用域。所以,我推荐使用let来声明变量,而不是var。
function fun() {
  for (let i = 10; i > 0; i--) {}
  console.log(i); // => Uncaught ReferenceError: i is not defined
}
let 和 var 的区别的更多相关文章
- JavaScript中变量声明有var和没var的区别
		JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ... 
- 详解变量声明加 var 和不加 var 的区别
		在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ... 
- 前端面试题:JS中的let和var的区别
		最近很多前端的朋友去面试被问到let和var的区别,其实阮一峰老师的ES6中已经很详细介绍了let的用法和var的区别.我简单总结一下,以便各位以后面试中使用. ES6 新增了let命令,用来声明局部 ... 
- es6入门1-- let与var的区别详解
		一.前言 说到做到,现在暂时放了放JS模式的读书笔记,打算好好看看ES6,毕竟出了这么久了,还是靠JS吃饭的,都不好好学JS新特性,确实说不过去,我本来是想当读书笔记去记录ES6,但是这个确实是属于边 ... 
- js中const,var,let区别(转载)
		js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ... 
- [js]js中变量带var和不带var的区别
		上图已说的很清晰了. 下面代码是赘述 <script> //带var和不带var的区别: // 1.只有带var的才可以预解释,所以在赋值的前操作不会报错. console.log(num ... 
- javascript中let和var的区别
		let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var的区别体现在作用域上.var的 ... 
- js中加“var”和不加“var”的区别
		JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ... 
- 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别
		今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ... 
- const,var,let区别(转载)
		1.const定义的变量不可以修改,而且必须初始化. const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);// ... 
随机推荐
- 【Hadoop学习】上:组成介绍、生态体系、环境准备、不同运行模式测试
			目录: 入门(上) HDFS(中) MapReduce&Yarn(下) 优化(补充) 一.大数据概述 概念 特点:VVVV 应用场景 二.Hadoop到大数据生态 1.Hadoop生态圈.发展 ... 
- Vue 打包报错UnhandledPromiseRejectionWarning: postcss-svgo: Error in parsing SVG
			解决方案 检查下自己最新写的css 或者最新引入的样式库,把里面的base64的url替换成双引号形式的 PS:我这报错是因为引入的weui.min.css里面的loading样式的`backgrou ... 
- Jmeter 之 switch 控制器
			switch 控制器作用: switch 控制器起到了分流作用,具体应用在并发时,一部分用户执行某个场景,一部分用户执行另外一种场景,就像吞吐量控制器进行分流操作 switch 控制器字段介绍: 实例 ... 
- Jmeter 函数助手之__UUID 生成唯一的标识符
			在测试ws协议接口时,常常需要传入唯一标识符,jmeter 提供__UUID.__Random生成随机的字符串,两者区别为:__UUID生成的随机字符串不会重复,而__Random会重复 __UUID ... 
- 前端使用工具规范commit信息
			前言 通过工具规范git提交信息也是工程化的一部分,在前端领域有一些工具为我们提供了相关功能,在这里做一下使用总结. commitlint commitlint是什么? 就像eslint用来检查js代 ... 
- kafka详解(04) - kafka监控 可视化工具
			kafka详解(04) - kafka监控 可视化工具 Kafka监控Eagle 1)修改kafka启动命令 修改kafka-server-start.sh命令中 if [ "x$KAFKA ... 
- 《深度探索C++对象模型》第六章 执行期语意学
			new运算符和delete运算符 运算符new看似是一个简单的运算,比如: int *pi=new int(5); 但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内存: / ... 
- Java反射获取方法参数名 IDEA配置 Maven
			默认情况下无法获得具体的参数名,只能得到arg0, arg1等. 进行如下配置即可通过反射获得具体的参数名. -parameters 如果是Maven项目,还需要在pom.xml文件中增加如下配置 & ... 
- OpenMP Parallel Construct 实现原理与源码分析
			OpenMP Parallel Construct 实现原理与源码分析 前言 在本篇文章当中我们将主要分析 OpenMP 当中的 parallel construct 具体时如何实现的,以及这个 co ... 
- drf基础:1、web应用模式、API接口、接口测试工具
			drf入门 一.web应用模式  web的应用模式共分为两种,前后端不分离.前后端分离 1.前后端混合  之前所写的bbs项目就是前后端不分离,后端人员在开发过程中使用模板语法,前后端都由一个人员 ... 
