var与let的区别

时间:2021-08-23 02:17:11
var与let的区别

前言:

  在没接触Es6之前,我们在js中声明都是通过var来声明变量的,var声明变量虽说方便,但是,又有一些自己的诟病,下边来说一说,这三个的区别!

var

  var相信大家都不陌生,前端在日常编程中,谁也离不开他,他的合理运用,让我们编写出适合自己的,适合浏览器的程序!

console.log(a)//undefind
var a=2;

  都知道我们前端程序都是自上而下执行,为什么他没发现a这个变量他的值变成了undefind,这就说到了我们var自带的变量提升,在没有声明这个变量之前,你这个变量具有全局的属性,都会进行变量提升!

它的实际样子是这样的

var a;
console.log(a)//undefind
var a=2;

大家这个样子就看懂了吧!

var与let
{
let a = 10;
var b = 1;
} a // ReferenceError: a is not defined.
b // 1

  大家都看到了,var声明的b在花括号外边打印出来,而let却报了一个错误!这就是let与咱们var 的区别,它的变量是区域的,也就是区域变量!

//在来看一个例子
if (true) {
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError let tmp;
console.log(tmp); // undefined tmp = 123;
console.log(tmp); // 123
}

上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”

// var 的情况
console.log(foo); // 输出undefined
var foo = 2; // let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}

上边这个变量如果用var声明的话会打印出10,而let声明的还是5,这就是块级作用域吧!都知道咱们的var有函数作用域域全局全用域,来咱们的let是块级作用域!他带来了很多好处!

var s = 'hello';

for (var i = 0; i < s.length; i++) {
console.log(s[i]);
} console.log(i);//5

函数在执行完之后泄露成了全局变量,而用let声明的则没有这一点

let s = 'hello';

for (let i = 0; i < s.length; i++) {
console.log(s[i]);
} console.log(i);//Uncaught TypeError: i is not a function

es6新增的let变成了块级可以防止内存泄露。。。好处还是很多的,这就是let与var的一些区别!

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

  1. 简述C&num;中关键字var和dynamic的区别

    C#中关键字var和dynamic的区别如下: 1.var申明的变量必须初始化,dynamic申明的变量无需初始化. 2.var关键字只能在方法内部申明局部变量,dynamic关键字可用于局部变量,字 ...

  2. var&comma; object&comma; dynamic的区别以及使用(转载)

    var, object, dynamic的区别以及使用 阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 拿这三者比较的原因 ...

  3. var&comma; object&comma; dynamic的区别以及dynamic的使用

    var, object, dynamic的区别以及dynamic的使用 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用 2013-06- ...

  4. var let const 的区别

    Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2. ...

  5. JavaScript中函数function fun&lpar;&rpar;&lbrace;&rcub;和 var fun&equals;function&lpar;&rpar;&lbrace;&rcub;的区别

    function fun(){} 和 var fun=function(){}的区别 标题有点长···· 废话少说,其实他们的主要区别就是"函数声明的提前行为". var fun= ...

  6. JS中const、var 和let的区别

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  7. Javascript var 和 let 的区别

    Javascript var 和 let 的区别 var 是函数块的全局变量. let 是代码块的局部变量. let 变量不会提升,如果先使用后定义会 undefind. 参考: https://de ...

  8. es6的let与es5的var定义变量的区别

    es6的let与es5的var定义变量的区别 自身新手第一次接触let关键字的时候,不知道let与var的区别,本能认为是一样,但非如此,比如下述的代码运行就会报错: let hello = 'hel ...

  9. var&comma; object&comma; dynamic的区别以及使用

    var, object, dynamic的区别以及使用 阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 拿这三者比较的原因 ...

随机推荐

  1. jsp xml servlet

    什么都懂一点,什么都不精通!!

  2. jQuery EasyUI datagrid实现本地分页的方法

    http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...

  3. greatis很不错,出售源代码

    http://www.greatis.com/delphicb/ 特别是: http://www.greatis.com/delphicb/imgedit/

  4. 八种排序算法--java实现(转)

    (转:http://blog.csdn.net/without0815/article/details/7697916) 8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中, ...

  5. log4net日志的简单配置

    说起来log4net,我一直都知道这个的存在,但实际在项目中还真是没有去自己写过的那,这一次我在项目完成后并没有着急下一个项目的开始,于是突然想起来是否添加一个日志的编写,于是开始了log4net的总 ...

  6. Rsync&plus;sersync实现数据实时同步

    前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增 ...

  7. linux 开机报错,error grub&lowbar;efi&lowbar;find&lowbar;mmap&lowbar;size not find

    开机报错,差点以为要重装系统了 搜到了官方的重建引导的教程 修复了错误 https://wiki.manjaro.org/index.php/Restore_the_GRUB_Bootloader#F ...

  8. linux查看tftp服务是否启动

    netstat -a |grep tftp 若输出以下信息说明tftp服务已启动: udp  0 0 *:tftp *:*

  9. Luogu&lowbar;4197 Peaks

    P4197 Peaks 并不会克鲁斯卡尔重构树,于是就写了离线算法. 使用了最小生成树,启发式合并treap 在最小生成树,克鲁斯卡尔算法 时 ,将询问一块处理.便可以保证询问时边的要求.然后利用平衡 ...

  10. opencv学习--透视变化

    透视变换和仿射变换具有很大的相同特性,前面提到了放射变化,这里再次把它拿出和透视变换进行比较 #include"cv.h" #include"highgui.h&quot ...