前  言

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的更多相关文章

  1. js中var的有或无--重复声明和以后的声明

    js中var的有或无--重复声明和以后的声明 使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误. 如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色. 如果重复 ...

  2. 浅谈JS中 var let const 变量声明

    浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...

  3. 【前端开发】】js中var写和不写的区别

    js中var用与不用的区别 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. v ...

  4. js中,var 修饰变量名和不修饰的区别

    js中 允许在定义变量的时候 不加var 修饰符.js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存.当且将其视为window的成员. 也就是全局变量. 如果加了va ...

  5. js中var 笔记

    js中声明变量会用到Var; 1,var a;声明一个变量a,此时输出a,会显示undefined:因为此时的a未定义: 2, var a=0;和b=0;有什么区别呢? 当声明一个全局变量时,实际是定 ...

  6. js 中var that=this

    js中经常出现var that=this,为什么这么做? http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean ...

  7. JS中var声明与function声明两种函数声明方式的区别

    JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(fun ...

  8. js中var

    js中声明一个变量的时候,建议要加上var.如果不加,除非你知道自己在干什么,否则哪天会吃亏哈哈. 不加var,js会认为你声明的是全局变量. 举个小例子. function test1(){ a = ...

  9. JS中var声明与function声明以及构造函数声明方式的区别

    JS中常见的三种函数声明(statement)方式有这三种: // 函数表达式(function expression) var h = function () { // h } // 函数声明(fu ...

  10. 深度理解js中var let const 区别

    首先要理解js中作用域的概念 作用域:指的是一个变量的作用范围 1.全局作用域 直接写在script中的js代码,在js中,万物皆对象,都在全局作用域,全局作用域在页面打开时创建,在全局作用域中有一个 ...

随机推荐

  1. TensorFlow构建卷积神经网络/模型保存与加载/正则化

    TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...

  2. Linux平台 Oracle 12cR2 RAC安装Part2:GI配置

    Linux平台 Oracle 12cR2 RAC安装Part2:GI配置 三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 ...

  3. Java内存溢出分析方法(Eclipse Memory Analyzer 使用简单入门)

    转载至:http://outofmemory.cn/java/jvm/OutOfMemoryError-analysis 工具 安装Memory Analyse Tools(MAT) 工具, 可以直接 ...

  4. C和C++中的名字空间和作用域

    C和C++中的名字空间和作用域 C语言中有名字空间这个概念吗? 提到名字空间(或者可能更普遍的叫法,命名空间),很可能先想到的是C++,甚至是C#.C中没有名字空间吧?一开始我也是这样认为的,直到我看 ...

  5. Topshelf便捷创建Windows服务

    结合Quartz.net学习,前提已经创建了一个定时任务,可见 <定时调度框架:Quartz.net> (基于配置文件形式) 首先引用Topshelf.dll 自定义服务TestServi ...

  6. 第1阶段——关于u-boot目标文件start.o中.globl 和.balignl理解(3)

    汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作. .globl _start 作用:声明一个_start全局符号(Symbol), 这个_sta ...

  7. MySQL的JOIN(四):JOIN优化实践之快速匹配

    这篇博文讲述如何优化扫描速度.我们通过MySQL的JOIN(二):JOIN原理得知了两张表的JOIN操作就是不断从驱动表中取出记录,然后查找出被驱动表中与之匹配的记录并连接.这个过程的实质就是查询操作 ...

  8. 只查看tomcat进程,不包括grep

    ps aux | grep tomcat  | grep -v "grep" | awk '{print $2}'

  9. 阿里云Maven地址

    GFW 呵呵呵 下载几个jar要几个小时.....伤透了 直接替换国内阿里云的maven镜像地址  速度嗖嗖嗖的.... 配置 修改maven根目录下的conf文件夹中的setting.xml文件,内 ...

  10. H5-html基础

    什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...