JavaScript学习笔记——变量、作用域、var、const和let

news2025/2/27 10:27:43

JavaScript学习笔记——变量、作用域、var、const和let

  • 学习链接(原链接)
  • 变量
    • 变量声明的三种方式
  • 作用域
    • 作用域介绍
    • 作用域分类
      • 全局作用域
      • 局部作用域(函数作用域)
      • 块级作用域
      • 块级作用域和局部(函数)作用域区别
  • var
    • var的作用域(全局+函数)
    • var变量的重新声明与修改
    • var变量提升
    • JS里面使用var声明变量存在的三个问题
  • const

学习链接(原链接)

菜鸟教程
let和const与var的区别
js中var、let、const的区别
JS里面使用var声明变量存在的三个问题
在JavaScript中,if 语句是/有 块级作用域吗?
JS IF 作用域
JavaScript的三座大山–(2)–作用域和闭包(牛牛牛牛牛)

变量

变量:存储信息的容器
可存放:值or表达式

命名规则:
字母开头
以$或_开头(不推荐)
大小写敏感

变量声明的三种方式

变量声明的三种方式:var、let、const

作用域

作用域介绍

作用域:一个变量或者函数的有效作用范围

作用域分类

在JS中作用域一共有三种,分别是全局作用域、局部作用域(函数作用域)、块级作用域;

全局作用域

全局作用域:
1、声明在函数外部的变量(声明在script标签中的变量和函数),在代码中任何地方都能访问到的对象拥有全局作用域;
var和let变量在全局作用域中都是全局变量;

注意:所有末定义直接赋值的变量自动声明为拥有全局作用域
最外层函数和在最外层函数外面定义的变量拥有全局作用域

2、全局作用域中声明的变量和函数会作为window对象的属性和方法保存,可以通过 window.变量名 去调用它;

3、全局作用域在页面打开时被创建,页面关闭时被销毁;

1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:
var authorName="波妞";
function doSomething(){
    var blogName="中介";
    function innerSay(){
        console.log(blogName);
    }
    innerSay();
}
console.log(authorName); //波妞
doSomething(); //中介
console.log(blogName); //错误
innerSay() //错误
2)所有未定义直接赋值的变量自动声明为拥有全局作用域,例如:
function doSomething(){
    var authorName="波妞";
    blogName="中介";
    console.log(authorName);
}
doSomething(); // 波妞
console.log(blogName); //中介
console.log(authorName); //错误

局部作用域(函数作用域)

块级作用域

块级作用域和局部(函数)作用域区别

var

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS--varletconst</title>
</head>
<body>
    <script>
        var x = 1;
        var y = 2;
        var z = x + y;
        document.write(x + "<br>");
        document.write(y + "<br>");
        document.write(z + "<br>");
    </script>
</body>
</html>

在这里插入图片描述
JavaScript——document.write

var的作用域(全局+函数)

var可以在全局范围声明函数/局部范围内声明。

示例:

var smytest = "smy";        //全局范围
function newFunction(){
    var smytest2 = "inner";
    console.log(smytest2);
}
console.log(smytest);       //输出:smy
newFunction();              //调用函数,输出:inner
console.log(smytest2);    	//输出:ReferenceError: smytest2 is not defined

var变量的重新声明与修改

var变量可以在相同的作用域内被重新声明和修改

var smytest = "smy";        //全局范围
var smytest = "fighting";   //相同作用域下重新声明
smytest = "emo";            //相同作用域下修改
function newFunction(){
    var smytest2 = "inner";
    var smytest2 = "outer"; //相同作用域下重新声明
    console.log(smytest2);
}
console.log(smytest);       //输出:emo
newFunction();              //调用函数,输出:outer

var变量提升

JavaScript 的一种机制:在执行代码之前,变量和函数声明会移至其作用域的顶部

console.log(greeter);
var greeter = 'say hello';

代码会被解释为:

var greeter;
console.log(greeter); // greeter is undefined
greeter = 'say hello';

var声明的变量会被提升到其作用域的顶部,并使用 undefined 值对其进行初始化

JS里面使用var声明变量存在的三个问题

1、允许重复声明,导致变量被覆盖
假设你var a = 2前面还有上万行代码,那么你调用prinf函数的时候,是想打印之前的a,但是你忘记之前声明的变量和几万行代码后面的a是同名的,导致后面声明的a覆盖了之前的a.

2、变量提升:闭包问题,怪异的数据访问.

if(Math.random() > 0.5){
    var a = "abc";
    console.log("if方法1" + a);
}else{
    console.log("if方法2" + a);
}
console.log("最外层" + a);

//输出:
//if方法2undefined
//最外层undefined

const

三级目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1382702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【elastic search】详解elastic search集群

目录 1.与集群有关的一些概念 2.集群搭建 3.集群搭建 4.kibana链接集群 5.选举流程 6.请求流程 7.master的作用 1.与集群有关的一些概念 数据分片&#xff1a; 数据分片&#xff08;shard&#xff09;&#xff0c;单台服务器的存储容量是有限的&#xff0c;把一份数据…

LINUX基础培训七之进程管理

前言、本章学习目标 了解LINUX中进程和程序掌握进程管理的作用和方法熟悉进程调度优先级了解LINUX信号 一、了解LINUX进程和程序 进程是正在执行的一个程序或命令&#xff0c;每个进程都是一个运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占用一定的系统资源。 …

【Python学习】Python学习15-模块

目录 【Python学习】Python学习15-模块 前言创建语法引入模块from…import 语句from…import* 语句搜索路径PYTHONPATH 变量-*- coding: UTF-8 -*-导入模块现在可以调用模块里包含的函数了PYTHONPATH 变量命名空间和作用域dir()函数globals() 和 locals() 函数reload() 函数Py…

pytest -- 基本使用详解

1. pytest基本介绍 pytest 是一个功能强大且易于使用的 Python 测试框架&#xff0c;用于编写单元测试、集成测试和功能测试。 它提供了丰富的功能和灵活的用法&#xff0c;使得编写和运行测试变得简单而高效。 --------------->>>>> pytest框架优点&#xff1a…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

C#中对浮点数NaN,PositiveInfinity,NegativeInfinity的特殊处理

NAN NAN 整体意思为Not a Number 不是一个数&#xff0c; NaN&#xff08;Not a Number&#xff0c;非数&#xff09;是计算机科学中数值数据类型的一类值&#xff0c;表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。 EEE 75…

AI-图片转换绚丽动漫人物-UGATIT

​​​​​​ &#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 ​​​​…

代码随想录算法训练营第五天天| 总结数组专题

数组&#xff1a;二分查找、双指针&#xff08;包括快慢指针&#xff09;、滑动窗口、模拟 链表&#xff1a;双指针、三指针、虚拟头指针、复杂指针操作画图明确每一步&#xff08;标好次序&#xff09; 数组 代码随想录总结的很好&#xff0c;如下图。我再结合自己的一些理解…

当使用WSL下载运行Docker可视化界面的镜像,使用报错

Traceback (most recent call last): File “app.py”, line 345, in root tk.Tk() File “/usr/lib/python3.8/tkinter/init.py”, line 2270, in init self.tk _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.T…

java基础知识点系列——运算符(四)

java基础知识点系列——运算符&#xff08;四&#xff09; 算术运算符 运算符和表达式 运算符&#xff1a;对常量或者变量进行操作的符号表达式&#xff1a;用运算符把常量或者变量链接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表…

数据结构排序——计数排序和排序总结(附上912. 排序数组讲解)

数据结构排序——计数排序和排序总结 现在常见算法排序都已讲解完成&#xff0c;今天就再讲个计数排序。再总结一下 文章目录 1.计数排序2.排序总结3.排序oj&#xff08;排序数组&#xff09;题目详情代码思路 1.计数排序 计数排序是一种非基于比较的排序算法&#xff0c;它通…

苹果电脑清理内存 怎么清理删不掉的软件

苹果电脑是很多人的首选&#xff0c;因为它有着优秀的性能和设计。但是&#xff0c;随着时间的推移&#xff0c;你可能会发现你的苹果电脑变得越来越慢&#xff0c;或者出现一些奇怪的问题。这可能是因为你的电脑内存不足&#xff0c;或者有一些删不掉的软件占用了你的空间和资…

谷粒商城-缓存使用分布式锁SpringCache(5天)

缓存使用 1.1.1 哪些数据适合放入缓存 即时性、 数据一致性要求不高的 访问量大且更新频率不高的数据&#xff08;读多&#xff0c; 写少&#xff09; 例如&#xff1a;电商类应用&#xff0c; 商品分类&#xff0c; 商品列表等适合缓存 本地缓存 使用Map进行本地缓存 本地缓存…

为了这口醋,包的这饺子。为了Selenium,学有限的CSS,逐步替换XPATH

Learn about CSS rules and pseudo-classes to help you move your XPATH locators to CSS. 1. 最基本IdElement TypeDirect ChildChild or Sub-ChildClass 2. 深入一点Next SiblingAttribute ValuesChoosing a Specific Match Sub-String Matches 3 参考资料 In order for Sel…

java编程解小学生一年级竞赛题

抖音教学视频 目录 1、题目三角形加起来为10 大纲 1、题目三角形加起来为10 连接&#xff1a;小学一年级数学竞赛练习题3套&#xff0c;有点难度&#xff01; 第16题 此方法不是最优解&#xff0c;穷举法&#xff0c;比较暴力解决 主要给大家演示如何用编程去解决我们的实…

格密码基础:SIS问题的定义与理解

目录 一. 介绍 二. SIS问题定义 2.1 直观理解 2.2 数学定义 2.3 基本性质 三. SIS与q-ary格 四. SIS问题的推广 五. Hermite标准型 六. 小结 一. 介绍 short interger solution problem短整数解问题&#xff0c;简称SIS问题。 1996年&#xff0c;Ajtai首次提出SIS问…

Unity Shader 属性的定义

Unity Shader 属性的定义 什么是材质球 人的衣服 什么是shader 决定材质跟灯光的作用 Property 若是把shader看作class&#xff0c;那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int&#xff1a; name("dis…

LLM漫谈(三)| 使用Chainlit和LangChain构建文档问答的LLM应用程序

一、Chainlit介绍 Chainlit是一个开源Python包&#xff0c;旨在彻底改变构建和共享语言模型&#xff08;LM&#xff09;应用程序的方式。Chainlit可以创建用户界面&#xff08;UI&#xff09;&#xff0c;类似于由OpenAI开发的ChatGPT用户界面&#xff0c;Chainlit可以开发类似…

基于TCP的全双工网络编程实践

首先我们先了解一下什么是全双工通信&#xff1f; 全双工数据通信允许数据同时在两个方向上传输&#xff0c;因此&#xff0c;全双工通信相当于是两个单工通信方式的结合&#xff0c;它要求发送设备和接收设备都有独立的接收和发送能力。 TCP服务端代码&#xff1a; #includ…