JavaScript 学习-9.使用let声明变量
前言
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
- let 声明的变量只在 let 命令所在的代码块内有效。
- const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 使用var声明变量只有两种作用域: 全局变量 与 函数内的局部变量。
var声明变量使用
var声明变量只有两种作用域: 全局变量 与 函数内的局部变量。
全局变量
在函数外声明的变量作用域是全局的, 在任意地方都可以引用
var x = 'hello';function fun1() {// 函数内部也可以引用xconsole.log(x)}fun1();
局部变量
在函数内部定义的var 变量只能局部使用,函数外面都无法引用。
function fun1() {var x = 'hello';// 函数内部可以引用xconsole.log(x)}// 函数外面不能引用函数内部变量xconsole.log(x) // x is not definedfun1();
没有块级作用域
使用var定义的变量,没有块级作用域,什么是块级?比如if 后面大括号的内容,for 循环大括号里面的循环体,都是块级。
a = 10;if (a > 0){var x = 'hello'}// if 块级外面也能引用xconsole.log(x)
for 循环体也是块级
arr = [1, 2, 3];for(var index in arr){var x = 'world'}// for 外面也能引用xconsole.log(x); // world// for 外面也能引用indexconsole.log(index); // 2
没有块级作用域,那在使用过程中就会出现一些问题,比如重新声明同一个名称变量
var a = 'hello'var x = 20;if (x > 0) {var a = 'world';}// 在if 中声明了同一个a, 最后会影响外面的a值console.log(a); // world
为了避免这种问题,所以在新的ES6 中添加了let 关键字声明变量
let 声明变量作用域
块级作用域
使用let声明的变量,首先具有块级作用域的概念,在块级代码声明的变量,外面无法引用
a = 10;if (a>0){let x = 'hello'; // let 声明块级变量console.log(x);}console.log(x); // x is not defined
如果块级代码外面也有同一个名称变量,使用let互不影响
a = 10;let x = 'world'if (a>0){let x = 'hello'; // let 声明块级变量console.log(x); // hello}console.log(x); // world
在for循环时使用let定义循环变量i
let i = 5;for (let i = 0; i < 10; i++) {// do something...}console.log(i) // 这里输出 i 为 5
局部变量
在函数体内使用 var 和 let 关键字声明的变量有点类似, 作用域都是局部的:
function fun() {let x = "hello"; // 局部作用域return x}
全局变量
在函数体外或代码块外使用 var 和 let 关键字声明的变量也类似,它们的作用域都是全局的
// 使用 var
var x = 'hello'; // 全局作用域// 使用 let
let y = 'hello'; // 全局作用域
let 和 var 不一样的地方
重复声明
var 可以对同一个变量重复声明,但是let不能重复声明
// 使用 var
var x = 'hello';
var x = 'world';
console.log(x); // world
使用let重复声明同一个let声明过的变量会报错,相同的作用域或块级作用域中都不行。
// 使用let
let y = 'world';
let y = 'world'; // 报错
会抛出异常Uncaught SyntaxError: Identifier 'y' has already been declared (at ...)
也不能使用 let 重复声明 war 声明过的变量,相同的作用域或块级作用域中都不行。
var y = 'world';
let y = 'world'; // 报错
或者以下也不行
let y = 'world';
var y = 'world'; // 报错
变量提升
let 声明的变量没有提升
console.log(x) // undefined
var x = 'hello'console.log(y) // 报错
let y = 'world';
全局作用域
使用 var 关键字声明的全局作用域变量属于 window 对象:
var x = "hello";
// 可以使用 window.x 访问变量
使用 let 关键字声明的全局作用域变量不属于 window 对象:
let y= "world";
// 不能使用 window.y访问变量
总的来说let声明的变量多了一个块级作用域的使用,在使用的时候尽量避免声明同一个变量。
JavaScript 学习-9.使用let声明变量相关推荐
- JavaScript学习笔记(6)变量
什么是变量,通俗来说就是存储东西的容器. 本质是程序在内存中申请的一块用来存放数据的空间.变量名存放的是存储空间的地址,我们通过变量名来找到这一块空间. 如何使用变量 变量的使用分为两步:1.声明变量 ...
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...
- Javascript学习笔记(三)--变量、作用域和内存问题
一.变量 1.基本类型和引用类型的值 变量包含两种不同类型的值:基本类型值和引用类型值. 基本类型值包括:Undefined.Null.Boolean.Number和String(String在js属 ...
- JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...
- [Javascript学习笔记]JS变量不声明也能使用,直接天下无敌!
认识变量 什么是变量 变量 变量的输入与输出 同时声明多个变量 声明变量特殊情况 变量命名规范 什么是变量 本质:变量是程序在内存中申请的一块用来存放数据的空间. 变量 变量的输入与输出 <!D ...
- JavaScript学习笔记 - 变量、作用域与内存问题
本文记录了我在学习前端上的笔记,方便以后的复习和巩固. 4.1基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型指的是简单的数据段,而引用类 ...
- JavaScript学习(八十四)—变量
JavaScript学习(八十四)-变量 一.什么是变量? 白话: 变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器. 我们通过 变量名 获取数据,甚至数据可以修改. 二.变量在内存中的存储 ...
- 【Javascript】javascript学习 六 七 JavaScript 变量/运算符
变量是用于存储信息的容器: x=5; length=66.10; 还记得在学校里学过的代数吗? 当您回忆在学校学过的代数课程时,想到的很可能是:x=5, y=6, z=x+y 等等. 还记得吗,一个字 ...
- JavaScript声明变量详解
前言 如果文章中有出现纰漏.错误之处,还请看到的小伙伴多多指教,先行谢过 在ES5阶段,JavaScript 使用 var 和 function 来声明变量, ES6 中又添加了let.const.i ...
最新文章
- 扩增子统计绘图3热图:样品相关分析,差异OTU/ASV
- 关于.framework 文件过大 移除包内对i386 x86_64 的支持
- Increasing or Decreasing 序列 转换
- 基于STM32,无人船岸基信息处理代码--python实现
- Unreal Engine 4 —— 多线程任务构建
- logback 配置详解
- python转义例题_笨办法学Python记录--习题37 异常,lambda,yield,转义序列
- 单源最短路径的Bellman-Ford算法。
- 【数字信号】基于matlab GUI可编程电音合成器【含Matlab源码 872期】
- 将dataset中的数据 数据库中 java_java-将NoSQLUnit与@ShouldMatchDataSet一起使用时,...
- 威纶触摸屏宏指令编程,字符串相关函数介绍与使用...
- msm8937+android7.1.1显示驱动解决显示残影问题
- 历史时点数据统计如何设计表结构_如何做好调薪管理?年度调薪的操作方式
- scalac: Token not found...
- java实现多张图片同时上传
- 图片去雾软件推荐,这些软件值得一试
- day.js插件处理日期
- EAUML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息
- PHP反弹shell
- chapter04_聪明的表设计
热门文章
- 用python写一个3D走马灯
- 高通骁龙835:手机充电5分钟续航5小时
- 使用极域电子教室远程批量处理
- 基于PLC控制的导热油温控系统如何实现远程监控
- linux shell 鼠标事件,Bash Shellshock事件:CVE-2014-6271资料汇总
- pycharm安装到32位操作系统
- 编写一个方法参数接收一个字符串,返回一个Date对象(在多种日期格式中找到与字符串匹配的那一个)用到解析异常ParseException
- 极路由2设备认证信息与服务器不符,极路由HC5761A救砖日志2
- 【统计学习方法】学习笔记——EM算法及其推广
- AtCoder Beginner Contest 187 F - Close Group