js中 let和var的区别
引入let的原因正是var的局限性,相比于var,let有以下几点优势:
- 作用域
var的作用域是会提升的,var声明的变量只能是全局的或者是整个函数块的。
let则允许声明一个作用域被限制在块级中的变量、语句或者表达式。
for(var i = 0; i < 5; i++) {
}
console.log(i);
上面的代码中使用的是var,那么最终的输出结果将会是5,因为i虽然是在for循环中声明的,但是作用域会被提升到函数块的边界或者直至全局。
但是如果使用的是let,将会报错:
let1]![(E:\JavaScript\Note\image\let1.PNG)
这是因为在这里声明的i被局限于for循环这个块中,出了这个块自然就找不到i这个变量了。
需要注意的是,在程序的顶层,let并不会像var那样将声明的变量加到全局对象上去:
let2]![(E:\JavaScript\Note\image\let2.PNG)
但是。。在nodejs中var声明的变量也没有加到全局对象上,???
let t1 = 0;
var t2 = “???”;
console.log(this.t1);//undefined
console.log(this.t2);//undefined
这点以后再仔细追究。
- 对let块级作用域的使用:
打印出li的序号:
如果使用var来定义循环控制变量
var oLi =document.getElementById('test').getElementsByTagName('li');for(var i = 0; i < oLi.length; i++) { oLi[i].onclick =function(event) {console.log(i);}}
那么在点击时输出的结果将会是相同的,都是li的个数。
如果使用let
var oLi =document.getElementById('test').getElementsByTagName('li');for(let i = 0; i < oLi.length; i++) { oLi[i].onclick =function(event) {console.log(i);}}
那么最终输出的结果将会是正确的。
这是为什么呢?
因为var声明的i对应的是全局变量,也就是说i是在循环之外存在的。所以每次点击都对应同一个i,而i是全局的,所以在循环结束后,i的值就已经确定了,因此每次点击出来的都是一样的。
但是如果使用了let,那么使用的将是块级作用域,也就是说,每个点击事件都会进入一个不同的块,所以每个点击都会输出正确的序号。
js中 let和var的区别相关推荐
- JS中 let 和var的区别
JS中let和var 的区别 简单介绍let var的常见变量提升 ES6可以用let定义块级作用域变量 let配合for循环的独特应用 let没有变量提升与暂时性死区 let变量不能重复声明 简单介 ...
- uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...
理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客blog.csdn.net 全局作用域中,用 const 和 l ...
- js中Let和Var的区别
写在前面: 本文转载自:https://www.cnblogs.com/fly_dragon/p/8669057.html 作者:FlyDragon 出处:http://www.cnblogs.com ...
- js中let const var的区别
1.var声明的变量会存在变量提升,而let 和 const的变量不会存在变量提升 也就是var声明的变量会被提升到他所在的作用域顶端去 // var: console.log(a) // 打印为 ' ...
- css里面的let,js中let和var定义变量的区别
javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...
- Js中的style,currentStyle,getComputedStyle()区别
Js中的style,currentStyle,getComputedStyle()区别 样式表有三种方式: 1.内嵌样式(inline Style)-是写在Tag里面的,内嵌样式只对所有的Tag有效 ...
- js中的extend的用法及其JS中substring与substr的区别
1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的. ...
- js中click()与onclick()的区别
由一个简单示例到 js中click()与onclick()的区别 之前朋友在学习js的时候遇到一个有意思的问题. 先贴一份代码说一下代码构成 这里是html结构 <ul><li> ...
- js中parentNode和parentElement的区别和用法
了解本篇的基础必须知道什么是节点,关于html dom节点知识点和节点类型的知识,分别看<js节点都有哪些类型?怎么判断是哪种节点类型?>和<js属性节点获取和移除>,下面直接 ...
最新文章
- 【Java网络编程(三)】TCP的使用——模拟用户登录
- WebAPI(part5)--排他操作
- python日志输出 超量 停止_linux 内存分配参数导致的 buffer_pool 分配不出来的问题排查...
- 免费福利 | 送你一份免费音频,让你躺着也能学习葡萄酒知识!
- 企业安全建设之自动化代码扫描(代码审计)
- Node.js:海量数据大行其道的今天 node.js 在IO方面如何异步非阻塞
- Python工具整合,为程序员和新手准备的 8 大 Python 工具
- Ecliplse安装tomcat插件
- 计算机网络第1章概述
- 自动装配的几种方式——Spring IOC/DI(四)
- 海康摄像头配置、国标平台接入、萤石云平台、局域网拉流方法
- 软件架构风格 - 虚拟机风格
- 精彩回顾 | NDBC 2021华为参会回顾
- 电脑设置了从睡眠中唤醒需要密码却没生效(已解决)
- 产品概念之1/4:前言 —— 有必要这么学术吗?
- 限制性波尔兹曼机RBM and DBN
- 前端学习-关于选择器的介绍和使用
- 自学(网站制作,FLASH,PS,3D)者,一定要看
- 紫林U盘解锁精灵V1.0.1
- 责任链模式(Chain of Responsibility) Java实现