JS中var与let的区别
区别:
- var声明的变量,其作用域在该语句所在的函数之内,存在着变量提升的现象。
- let声明的变量,其作用域为该句所在的代码块内,不存在变量提升的问题。
- let相比于var,其不允许在相同作用域内,重复声明同一个变量。
{
let a = 11;
var b = 51;
}
a // Uncaught ReferenceError: a is not defined
b // 51上述的代码的结果说明,let所声明的变量只在其代码块中有效。
var a = [];
for (var i = 0; i < 4; i++) {
a[i] = function () {
console.log(i);
};
//使用var声明,得到4个4
}
a[0](); //4
a[1](); //4
a[2](); //4
a[3](); //4
//使用let声明,得到0,1,2,3 var a = [];
for (let i = 0; i < 4; i++) {
a[i] = function () {
console.log(i);
};
}
a[0](); //0
a[1](); //1
a[2](); //2
a[3](); //3
//使用let声明,得到0,1,2,3上述for循环的例子,我们可以这样理解。当for循环使用let时产生了块级作用域,每次循环块级作用域中的 i 都相互独立,并不像var那样全程共用了一个。因此它输出的结果便与var的结果不同。
var boo=521;
if(true){
boo='abc';//ReferenceError: boo is not defined
let boo;
}
上述代码中,存在着全局变量boo,但是块级作用域内let又声明了一个局部变量boo,导致后者绑定这个块级作用域,所以在let声明变量前,对boo赋值会报错。总而言之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
JS中var与let的区别的更多相关文章
- 【前端开发】】js中var写和不写的区别
js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...
- JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别
JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...
- (网页)Angular.js 中 copy 赋值与 = 赋值 区别
转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.use ...
- js中的substr和substring区别
js中的substr和substring区别 Substring: 该方法可以有一个参数也可以有两个参数. (1) 一个参数: 示例: var str=“Olive”: str.substring( ...
- JS 中的require 和 import 区别整理
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- js中var的有或无--重复声明和以后的声明
js中var的有或无--重复声明和以后的声明 使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误. 如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色. 如果重复 ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- JS中var声明与function声明两种函数声明方式的区别
JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(fun ...
随机推荐
- 三分法-洛谷P3382
wampserver没下下来,lcm莫比乌斯反演写挂了,splay树段错误, nobody ever knows writing bugs better than me 然后今晚要打cf,不如先写个三 ...
- LSB隐写加密MISC
没有做过LSB隐写加密的题目,在buuoj上面做到了就记录一下,估计后面很长的时间都会在这个平台上面训练自己的MISC和WEB,是很好的平台,把很多比赛的原题和安恒的周赛的复现了. 题目是MISC里面 ...
- Kubernetes-21:Apiserver等证书修改使用年限
Kubernetes证书使用年限修改方法 Kubernetes的apiservice.crt证书默认只有一年的使用期限,查看方法: cd /etc/kubernetes/pki [root@Cen ...
- Java基础学习之基础概念与环境搭建(1)
1.Java基础概念 1.1.Java语言的特点 Java语言是简单易学的 Java语言是面向对象(封装.继承和多态) Java语言是平台无关的(一次编译,到处运行) Java语言是可靠的.安全的(异 ...
- 在.Net中所有可序列化的类都被标记为_
[Serializable] 这个叫Attribute写在类.属性.字段的上面,比如 [Serializable] class A { ... }
- WC.exe(基于Java实现)
一.github地址 https://github.com/Mazin-hub/MyWC.exe.git 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- this.$options.data()实战之重置data
刚刚看到这个方法学习了一下,然后想到正在开发的项目有一个需要重置data的操作,正好拿来使用一下,节省了好多代码,美滋滋...
- DVWA各等级sql注入
sql全等级注入 level:low <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { //判断submit是否存在 // Get input $id = ...
- 除了MD5加密,试一下签名吧
需求 MD5加密,简单密码用彩虹表很容易破解. 密码不能被暴力破解,可以根据定制字符,时间戳等防止破解 解决方案 签名 密码加密 源码 const crypto = require('crypto') ...
- Flink相对于Spark的优点
Flink相对于Spark的优点 容错 Flink 基于两阶段提交实现了精确的一次处理语义. Spark Streaming 只能做到不丢数据,但是有重复. 反压 Flink 在数据传输过程中使用了分 ...