在JavaScript中,定义变量的关键词一般用var,但还有一种定义变量的关键词叫let。两者的作用域范围不一样,我们可以将var理解为定义的是一个全局变量,而let定义的是一个局部变量。故let常用于函数体中,使得变量的作用域仅限于函数体内。下面通过一小段代码展示他们的作用范围。

  a();
function a() {
let a = 'dd';
var b = 10;
alert(b);
}
alert(a); // 报错,b is not defined
alert(b);//成功打印10

可以看到,函数体内用var定义的变量是一个全局内,故可在函数外被打印;而let定义的变量进作用于函数体内,故在函数体外被打印回报出a没有定义的错误。

下面再深入介绍下二者的区别:

  • 声名变量的提升区别:

var声名的变量在解析时会初始化变量,并赋予undefined,但let定义的变量在解析时不会被初始化。

alert(a);//打印undefined
alert(b);//报出未定义的错误
var a = 1;
let b = 2;
alert(a);//打印1
alert(b);//打印2
  • 重复声名变量的区别

var可以重复声明一个变量,但let在一个作用域里不能重复声名同一个变量,不然会报错。

        var a = 1;
var a = 5;
let b = 2;
let b = 8; //重复声名会报错,因为b变量已被定义
alert(a); //打印5
alert(b);

let和var的区别的更多相关文章

  1. JavaScript中变量声明有var和没var的区别

    JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...

  2. 详解变量声明加 var 和不加 var 的区别

    在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ...

  3. 前端面试题:JS中的let和var的区别

    最近很多前端的朋友去面试被问到let和var的区别,其实阮一峰老师的ES6中已经很详细介绍了let的用法和var的区别.我简单总结一下,以便各位以后面试中使用. ES6 新增了let命令,用来声明局部 ...

  4. es6入门1-- let与var的区别详解

    一.前言 说到做到,现在暂时放了放JS模式的读书笔记,打算好好看看ES6,毕竟出了这么久了,还是靠JS吃饭的,都不好好学JS新特性,确实说不过去,我本来是想当读书笔记去记录ES6,但是这个确实是属于边 ...

  5. js中const,var,let区别(转载)

    js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...

  6. [js]js中变量带var和不带var的区别

    上图已说的很清晰了. 下面代码是赘述 <script> //带var和不带var的区别: // 1.只有带var的才可以预解释,所以在赋值的前操作不会报错. console.log(num ...

  7. javascript中let和var的区别

    let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var的区别体现在作用域上.var的 ...

  8. js中加“var”和不加“var”的区别

    JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ...

  9. 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...

  10. const,var,let区别(转载)

    1.const定义的变量不可以修改,而且必须初始化. const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);// ...

随机推荐

  1. PHP网页简单的计算机源代码

    还是那样老师留的作业,百度一波和老师留的作业有区别!自己写一下!! 作业题目: 实现PHP网页的计算器功能.至少实现运算符 +.-.*./.取模的功能. (提示:可以点击‘等号’进行运算,也可以另外添 ...

  2. Bean Java配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  3. c# 类型转换 int.TryParse() 方法

    public static bool TryParse(string s, out Int32 result); 如果转换成功则返回true.否则返回false int.TryParse(string ...

  4. 数据结构必做题参考:实验一T1-20,实验2 T1

    实验一T1-10 #include <bits/stdc++.h> using namespace std; ; struct Book { string isbn; string nam ...

  5. webpack知识点散记

    1.今天学习webpack  ,刚开头就碰到了钉子,因为现在都是4+的版本,用以前的老命令不好使,如下例子及解决办法 不好用:  webpack3的   打包文件   webpack a.js b.j ...

  6. 自定义 radio 的样式,更改选中样式

      思路: 1. 可以为<label>元素添加生成性内容(伪元素),并基于单选按钮的状态来为其设置样式: 2. 然后把真正的单选按钮隐藏起来: 3. 最后把生成内容美化一下. 解决方法: ...

  7. salt教程1-理解saltstack

    https://docs.saltstack.com/en/getstarted/system/index.html 1 基本介绍 通过观察它的实际运行,你可以大致理解salt如何工作.这意味着,在控 ...

  8. React之生命周期函数(16.3以后新版本)

    学习链接: https://www.jianshu.com/p/514fe21b9914 学习链接:https://zhuanlan.zhihu.com/p/38030418 学习链接:https:/ ...

  9. 移动端主页内容 part4 axios

    ajax  可以动态获取数据内容 vue中发送ajax有很多工具可用 浏览器自带的fetch 现在推荐: axios第三方模块(vue中发送ajax) 特点: 跨平台的数据请求 浏览器中xhr请求 n ...

  10. POJ 2676:Sudoku 数独

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15830   Accepted: 7737   Special ...