JS中var和let
前 言
JavaScript
大家都知道声明一个变量时,通常会用'var'来声明,但是在ES6中,定义了另一个关键字'let'。今天我就为大家带来'var'与'let'这两个关键字声明有何异同。
1.1
未赋值声明
<script type="text/javascript">
//试验代码
var a;
let b; console.log("这是var声明:"+a);
console.log("这是let声明:"+a);
</script>
结果:
从上面的代码就可以看出,在声明变量时,不赋值情况下let和var是一样的,都显示为:undefined。
1.2重复声明一个变量
<script type="text/javascript">
//试验代码
var a = 1;
var a = 2; console.log("这是var声明:"+a);
</script>
运行结果:
<script type="text/javascript">
//试验代码
let a = 1;
let a = 2; console.log("这是var声明:"+a);
</script>
<script type="text/javascript">
//试验代码
var a = 1;
let a = 2; console.log("这是var声明:"+a);
</script>
运行结果:
从上面的代码看出,当定义一个变量后,var和let都可以再次为定义的变量赋值。但是,使用var声明的变量,可以重复声明这个变量n次,而使用let声明的变量只能声明一次,而且,就算是var或其他的关键字声明后的变量,再使用let声明时,也会出错。
1.3函数作用域
<script type="text/javascript">
//试验代码
var a = 1;
let b = 2;
c = 3;
!function(){
var a = 4;
let b = 5;
c = 6;
console.log("这是自执行函数var声明a:"+a);
console.log("这是自执行函数let声明b:"+b);
}(); console.log("这是var声明a:"+a);
console.log("这是let声明b:"+b);
console.log("这是全局变量c:"+c );
</script>
运行结果:
从上面的代码和结果可以看出,var和let在函数作用域中的表现是一样的。函数中定义的变量只能在函数中调用,除非全局变量。
1.5块作用域
<script type="text/javascript">
//试验代码
for(var i=0;i<5;i++){
console.log(i);
}
console.log(i);
</script>
运行结果:
<script type="text/javascript">
//试验代码
for(let i=0;i<5;i++){
console.log(i);
}
console.log(i);
</script>
运行结果:
<script type="text/javascript">
//试验代码
let c = 3;
console.log('函数外let定义c:' + c);
!function(){
let c = 6;
console.log('函数内let定义c:' + c);
}();
console.log('函数调用后let定义c不受函数内部定义影响:' + c);
</script>
运行结果:
从上面的代码看出,在for循环中使用var声明的变量,在循环结束后可以放在循环外输出,而使用let声明的,在循环外是不能调用,提示错误。上面提到过let声明的变量,不可以重复声明,但是在let的块作用域下,let可以再次声明这个变量,但在函数声明的变量,只能在函数中使用,也就是说用let声明的两个变量,是两个不同的变量。这也是let与var最大的区别。
JS中var和let的更多相关文章
- js中var的有或无--重复声明和以后的声明
js中var的有或无--重复声明和以后的声明 使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误. 如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色. 如果重复 ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- 【前端开发】】js中var写和不写的区别
js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...
- js中,var 修饰变量名和不修饰的区别
js中 允许在定义变量的时候 不加var 修饰符.js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存.当且将其视为window的成员. 也就是全局变量. 如果加了va ...
- js中var 笔记
js中声明变量会用到Var; 1,var a;声明一个变量a,此时输出a,会显示undefined:因为此时的a未定义: 2, var a=0;和b=0;有什么区别呢? 当声明一个全局变量时,实际是定 ...
- js 中var that=this
js中经常出现var that=this,为什么这么做? http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean ...
- JS中var声明与function声明两种函数声明方式的区别
JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(fun ...
- js中var
js中声明一个变量的时候,建议要加上var.如果不加,除非你知道自己在干什么,否则哪天会吃亏哈哈. 不加var,js会认为你声明的是全局变量. 举个小例子. function test1(){ a = ...
- JS中var声明与function声明以及构造函数声明方式的区别
JS中常见的三种函数声明(statement)方式有这三种: // 函数表达式(function expression) var h = function () { // h } // 函数声明(fu ...
- 深度理解js中var let const 区别
首先要理解js中作用域的概念 作用域:指的是一个变量的作用范围 1.全局作用域 直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个 ...
随机推荐
- javasript校验字符串【正则和其他函数】
/**javasript校验输入框值只能为数字中文英文和下划线**/function isRegex(s){ var reg=/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/; if (! ...
- 程序员也是弱势群体?——从WePhone开发者事件说起
作为一名不爱凑热闹的人,今天一直在持续关注一个热点事件--WePhone开发者自杀,即使前几天热议的孕妇跳楼新闻我都不太关注,但是这个事件却让我深深的震撼,花了几个小时在微博上搜索了相关的信息,去了解 ...
- Kafka中操作topic时 Error:Failed to parse the broker info from zookeeper
Kafka中操作topic时 Error: Failed to parse the broker info from zookeeper 1.问题描述 2.问题原因 kafka在启动后 ...
- CDN架构以及原理分析
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应 ...
- 第2阶段——编写uboot之编译测试以及改进(3)
编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/ ...
- Javascript学习日志(三):闭包
说实话,前面一节的原型和原型链在当初学的时候并没有很头疼,对着高级编程第三版撸了几遍就理解透了,闭包这一节真的挺头疼的,很惭愧,看了差不多十来遍吧,还翻看了网上的其他博客和解释文档,五花八门的表达方式 ...
- [自制操作系统] 图形界面&VBE工具&MMIO显存&图形库/字库
本文记录了在JOS(或在任意OS)上实现图形界面的方法与一些图形库的实现. 本文中支持的新特性: 支持基本图形显示 支持中英文显示(中英文点阵字库) 相关:VBE VESA MMIO 点阵字库 Git ...
- test文件伪装
该文件属于伪装图片类型.图片另存后把后缀改为rar将看到txt文件. 利用了 cmd cp /b 命令 命令格式:copy /b 文件1+文件2+......文件N 合并后的文件名<br&g ...
- yum的初步了解与使用
什么是yum Yum(Yellow dog Updater,Modified)是一个基于RPM包管理的字符前端软件包管理器.能够从指定的服务器自动下载RPM包并且安装,可解决软件包相关依赖性,并且一次 ...
- CRC与MD5的异同
php中CRC32的用法: crc32 - 计算一个字符串的 crc32 多项式 生成 string 参数的 32 位循环冗余校验码多项式--: 这句话从英文翻译过来的,不正确,准确的说应该是这么理解 ...