一、变量提升

var存在变量提升,而let不存在变量提升,所以用let定义的变量一定要在声明后再使用,否则会报错。

var

//var定义的变量存在变量提升,变量会把声明提升到整个作用域的最前面
//例子1
console.log(a);  //undefined
var c=10;//等价于
var c;
console.log(a);  //undefined
c=10;/*------------------------*/
//例子2
var a=100;
function func(){console.log(a); //undefinedvar a=10;console.log(a); // 10
}
func(); //调用函数//等价于
var a=100;
function func(){var a;console.log(a); //undefineda=10;console.log(a); // 10
}
func(); //调用函数//注意:
//对于不声明而直接赋值的变量,相当于全局变量,赋值之后才可以使用,赋值之前会报错
console.log(a); //报错:a is not defined
a=100;
console.log(a); //100

let

//let定义的变量不存在变量声明,变量在声明前使用会报错
//例子1
console.log(a);  //报错 a is not defined
let a=100;//例子2
function func(){console.log(a);let a=100;
}
func();//调用函数

二、作用域

var:只有全局作用域和函数作用域概念,没有块级作用域的概念。

let:只有块级作用域的概念 ,由 { } 包括起来,if语句和for语句里面的{ }也属于块级作用域。

var

//全局作用域例子
//也就是除了在函数内部定义的变量,其他都是全局变量。
for(var i=0;i<100;i++){;
}
console.log(i); // 100//函数作用域例子,如下 b会输出10 ,而a会报错“a is not defined”,为什么呢?
//因为对于不声明而直接赋值的变量(b),相当于全局变量。
//而对于在函数里声明赋值的变量(a),它只在函数内部有效,外部无法访问,否则会报错function func(){b=10;var a=100;
}
func();//调用函数
console.log(b);  //  10
console.log(a);  //报错  a is not defined

考一考

/*补知识函数的语法:自调用函数,也就是会定义并调用该函数(IIFE)(function(){})();
*/
//考一考
(function(){var a=b=100;
})();
console.log(b);
console.log(a); //问题:a和b分别会输出什么呢?//答案:b会输出100,而a会报错“a is not defined”//为什么呢?//首先,将该函数分解为我们所熟悉的写法
(function(){var a=100;b=100;
})();
console.log(b); //  100
console.log(a); // 报错 a is not defined;//由此,可以看出了吧?这是前面所说的“函数的作用域”:b相当于全局变量,而a只作用于该函数内,外部访问不了。

let

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。在代码块中,使用let命令声明变量之前,该变量都是不可用的,这在语法上称为“暂时性死亡”

//例子1
//会报错“a is not defined”,因为在if代码块内,使用let声明变量之前,该变量都是不可用的,否则会报错
if(true){a=123;let a;
}//例子2
//会报错“i is not defined”,因为用let定义的i只在for循环体内有效
for(let i=1;i<100;i++){;
}
console.log(i)

三、重复声明

var:变量可以多次声明

let:变量不允许重复声明,let不允许在相同作用域内,重复声明同一个变量。不能在函数内部,重新声明同一个参数

var

var a=10;
function func(){console.log(a); // undefinedvar a=11;console.log(a); // 11
}
func();
console.log(a); // 10
var a;
console.log(a); // 10
var a =12;
console.log(a); // 12//这个其实涉及到的是var的变量可重复声明和变量提升
//以上其实可以等价于
var a;
a=10;
function func(){var a;console.log(a); // undefineda=11;console.log(a); // 11
}
func();
console.log(a); // 10console.log(a); // 10
a =12;
console.log(a); // 12//这样,相信很容易得出正确的答案

let

//例子1
//会报错“Identifier 'a' has already been declared”
var a=1;
let a=2;//例子2
//不会报错,因为a可以在不同作用域内声明的。
let a='hello';
{let a='hi';console.log(a); // hi
}
console.log(a); // hello//例子3
//会报错" Identifier 'a' has already been declared",因为var定义的变量会发生变量提升。
let a='hello';
{var a='hi';console.log(a);
}
console.log(a);//例子4
//会报错“Identifier 'a' has already been declared”,
//不能在函数内部重复声明同一个参数,因为参数变量是默认声明的,所以不能用let或const再次声明
function func(a){let a='hello';console.log(a);
}
func('hi');

大概就这些了~发现有错误的或者有疑问的可以在下面评论哦~互相学习学习

let与var的区别(重点看例子)相关推荐

  1. js中加“var”和不加“var”的区别,看完觉得这么多年js白学了

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

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

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

  3. Javascript全局变量var与不var的区别深入解析

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...

  4. 后端技术:Java中Spring 和 Spring Boot 有哪些区别,看完你就明白了!

    概述 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对 ...

  5. JavaScript面试题,let和var的区别,let和const是什么意思?

    一.let和var的区别 1.let声明的变量是块级作用域(所在花括号里),var是函数作用域和全局作用域      注意:let是可以定义全局变量,局部变量,块级作用域的变量. 2.let声明的变量 ...

  6. 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了)

    title: 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了) tags: 面试常见题 腾讯面试题:char 和 varchar的最大长度是 ...

  7. 看例子,学 Python(二)

    看例子,学 Python(二) 看例子,学 Python(一) 看例子,学 Python(三) 模块 文件 mymath.py 定义了函数 fib 和 fac,mymath.py 就是一个模块. A ...

  8. JS中 let 和var的区别

    JS中let和var 的区别 简单介绍let var的常见变量提升 ES6可以用let定义块级作用域变量 let配合for循环的独特应用 let没有变量提升与暂时性死区 let变量不能重复声明 简单介 ...

  9. python对象模型映射_看例子,学 Python(三)

    看例子,学 Python(三) 包 创建一个目录 myutil,把 mymath.py 挪到里面,再添加一个空文件 __init__.py: myutil/ __init__.py mymath.py ...

  10. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

最新文章

  1. 使用指针判断数组是否为上三角矩阵
  2. 第一次来,试发一帖!--ASP.NET 2.0 中的SqlCacheDependency特性
  3. 【ABAP】如何判断单据是否被锁定
  4. Linux 之十二 Makefile 从入门到放弃全解
  5. jQuery源码解析(5)—— Animation动画
  6. 公司想建个FTP文件服务器,自己折腾把一台电脑做成文件服务器了,但是考虑稳定性放弃,计划买个有哪些建议?
  7. MySql中的count函数
  8. 微信小程序 java社区团购系统springboot
  9. JavaWeb教程路线
  10. 数字滤波器的简单使用
  11. html中字号的标签是什么,htmlfont标签是什么?font标签的属性的详细介绍
  12. 域名泛解析,二级域名转向问题- -完美解决
  13. C# 基础(三十一)c#实现 正弦sin、反正弦arcsin,正切tan、反正切arctan:求角度值
  14. java BPM平台1:设计思路
  15. php作业批改系统源码,在线|WEB作业批改系统
  16. 云服务,云服务商比较
  17. ERROR 1197 (HY000)问题原因及解决方法
  18. IELTS Lexical Resources - Writing 3 - Reasoning and discussion
  19. 一个简单的socket套接字服务器,Python
  20. 互联网摸鱼日报(2022-12-22)

热门文章

  1. shader篇-纹理-凹凸映射
  2. 数学建模常用模型04 :灰色关联分析法
  3. 路由器、猫、交换机的解释
  4. VINS-Mono 论文公式推导与代码解析
  5. navicat如何粘贴多行数据
  6. 英国沦陷了!2014年英国婴儿名top10,穆罕默德意外夺魁
  7. 如何使用腾讯云GPU云服务器完成 blender 的动画图片渲染
  8. led灯光衰怎么解决_影响LED灯具光衰的原因及解决方法
  9. k8s搭建xxl-job过程
  10. 今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界