首页 > 编程语言 >JavaScript let

JavaScript let

时间:2022-09-03 00:22:53浏览次数:57  
标签:10 变量 作用域 JavaScript let var 声明

JavaScript let

1. 全局作用域

全局(在函数之外)声明的变量拥有全局作用域

var name1 = "yao";//全局作用域
//此处可以使用name1
function myFunction(){
    //此处也可以使用name1
}

全局变量可以在JavaScript程序中的任何位置访问。

2. 函数作用域

局部(函数内)声明的变量拥有函数作用域

//这里不可以使用carName
function myFunction(){
        var carName = 'porsche';//函数作用域
    //这里可以使用carName
    }
//这里不可以使用carName

局部变量只能在它们被声明的函数内访问。

3. JavaScript 块作用域

通过var关键词声明的变量没有作用域

在块{ }内声明的变量可以从块之外进行访问。

{
    var x = 10;
}
//此处可以使用 x

可以通过let关键词声明拥有块作用域的变量。

在块{ }内声明的变量无法从块外访问。

{
    let x = 10;
}
//此处不可以使用 x

4. 重新声明变量

使用var关键字重新声明变量会带来问题。

在块中重新声明变量也将重新声明块外的变量:

var name = 'yao';
{
    var name = 'li';
}
//此处 name 为 li

使用let关键字重新声明变量

在块中重新声明变量不会重新声明块外的变量:

var name = 'yao';
{
    let name = 'li';
}
//此处 name 为 yao

5. 循环作用域

在循环中使用var

var i = 7;
for (var i = 0; i < 10; i++){
    //一些代码
}
//此处 i 为 7

在循环中使用let

let i = 7;
for (let i = 0; i < 10; i++){
    //一些代码
}
//此处 i 为 10

在例子中,在循环中使用的变量使用var重新声明了循环之外的变量。

在循环中使用的变量使用let并没有重新声明循环外的变量。

如果在循环中用let声明了变量 i ,那么只有在循环内,变量 i 才是可见的

6. HTML 中的全局变量

在 HTML 中,全局作用域是 window 对象

通过var关键词定义的全局变量属于 window 对象:

var carName = 'poesche';
//此处的代码可使用 window.carName

通过let关键词定义的全局变量不属于 window 对象:

let carName = 'Audi';
//此处的代码不可使用 window.carName

7. 重新声明

允许在程序的任何位置使用var重新声明 JavaScript 变量:

var x = 10;
//现在 x 为 10
var x = 20;
//现在 x 为 20

在相同的作用域,或在相同的块中,不允许通过let重新声明一个var变量

var x = 10;//允许
let x = 20;//不允许
{
    var x = 10;//允许
    let y = 20;//不允许
}

在相同的作用域,或在相同的块中,不允许通过let重新声明一个let变量

let x = 10;//允许
let x = 20;//不允许
{
    let x = 10;//允许
    let x = 20;//不允许
}

在相同的作用域,或在相同的块中,不允许通过var重新声明一个let变量

let x = 10;//允许
var x = 20;//不允许
{
    let x = 10;//允许
    var x = 20;//不允许
}

不同的作用域或块中,允许通过let重新声明变量、

let x = 20;//允许
{
    let x = 7;//允许
}
{
    let x = 80;//允许
}

8. 提升

通过var声明的变量会提升(Hoisting)到顶端,可以在声明变量之前就使用它

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript 提升</title>
</head>
<body>
    <h1>JavaScript 提升</h1>
    <p>使用<b>var</b>,可以在声明之前使用变量:</p>
    <p id="demo"></p>//Audi
    <script>
        carName = 'Audi';
        document.getElementById('demo').innerHTML = carName;
        var carName;
    </script>
</body>
</html>

通过let定义的变量不会被提升到顶端

在声明let变量之前就使用它会导致ReferenceError

变量从块的开头一直处于"暂时死区",直到声明为止

标签:10,变量,作用域,JavaScript,let,var,声明
From: https://www.cnblogs.com/YlMXY/p/16651758.html

相关文章

  • Day01-JavaScript
    0825:Day01JS编写位置1.外链式 外部文件夹JS文件中,然后通过script标签引入 <scriptsrc="js/script.js"></script>2.嵌入式 内部的script的标签中 <script>alert("......
  • JavaScript学习
    一、什么是JavaScriptJavaScript世界上最流行的脚本语言一个合格的后端人员,必须精通JavaScript二、快速入门2.1、引入JavaScript内部引入<!DOCTYPEhtml><htmlla......
  • ES6 关键字 let 和 ES5 及以前关键字 var 的区别
    var在ES5及以前,通过var在块级作用域中声明的变量,外边也可以访问。块级作用域就是一对{}的作用域;块级作用域可以是控制语句的作用域,也就是非函数的作用域。functionf()......
  • JavaScript 一些实用辅助类库
    "usestrict";var__emptyPoint=null,__emptyContext=null;constColorRefTable=[['aliceblue','#f0f8ff'],['antiquewhite','#faebd7'],['aqua','#00......
  • DispatcherServlet 分发流程
    0太长不看版HTTPServlet的Service方法将请求按类进行分解主要是根据HTTP方法的类型调用doXXX方法GET和HEAD方法需要对if-modified-since进行特殊处理,其他......
  • letcode算法--9.最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog......
  • letcode算法--8.盛水最多的容器
    给定一个长度为n的整数数组 height 。有 n 条垂线,第i条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容......
  • Servlet粗略了解
    Servlet是运行在Web服务器(容器)中的特殊JAVA类,用来处理用户的HTTP请求开发一个Servlet程序的步骤实现Servlet接口init(ServletConfig):用来初始化Servlet类的方法,在整个......
  • letcode算法--7.回文数
    给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。来源:力扣(Leet......
  • Kotlin:内联函数let、also、with、run、apply
    Let使用方法://作用1:使用it替代object对象去访问其公有的属性&方法object.let{it.todo()}//作用2:判断object为null的操作object?.let{//表示object不为nul......