9.JS-作用域-预解析

news2024/9/23 21:26:37

1.作用域

代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,减少命名冲突

2.js作用域的分类(es6之前)

全局作用域和局部作用域
全局作用域:整个script标签或者是一个单独的js文件
局部作用域:在函数内部就是局部作用域

3.变量的作用域

3.1全局变量

1、在全局作用域下声明的变量,在任何位置都可以使用
2、在函数内部没有声明,直接赋值的变量也属于全局变量(要先调用一次函数)
3、全局变量只有在浏览器关闭时才会销毁,比较占用内存资源

<!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>Document</title>
    <script>
        function fun(){
            num = 2;
        }
        fun();
        console.log(num);
    </script>
</head>
<body>
    
</body>
</html>

在这里插入图片描述
如果没有提前调用,也会报错:

<!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>Document</title>
    <script>
        function fun(){
            num = 2;
        }
        // fun();
        console.log(num);
    </script>
</head>
<body>
    
</body>
</html>

在这里插入图片描述

3.2局部变量

1、在局部作用域中声明的变量,只能在局部作用域中使用,如果超出了局部作用域范围去使用该变量,就会报错
2、函数的形参也可以看作是局部变量
3、当程序执行完毕就会销毁,比较节约资源

4.JS没有块级作用域

es6之后新增了块级作用域

4.1块级作用域:

用花括号{}括起来的范围,如if(){}
在块级作用域内部声明的变量,在外部不能调用

5.作用域链

根据内部函数可以访问外部函数变量这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链
就近原则查找

<!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>Document</title>
    <script>
        var num = 1;
        function fun1() {
            var num = 2;
            function fun2() {
                return num;
            }
            return fun2();
        }
        console.log(fun1());

    </script>
</head>

<body>

</body>

</html>

在这里插入图片描述

6.预解析

js引擎运行js分为两步:预解析和代码执行
预解析:js引擎会把js里所有的var和function提升到当前作用域的最前面
代码执行:按照代码书写顺序,从上往下执行

6.1 变量预解析(提升)

把所有变量声明提到当前的作用域最前面,但是不提升赋值操作

<!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>Document</title>
    <script>
        console.log(num);//undefined
        var num = 10;
        
        fun();//报错
        var fun=function(){
            console.log(12);
        }
    </script>
</head>
<body>
    
</body>
</html>

在这里插入图片描述

6.2 函数预解析(提升)

把所有函数声明提升到当前作用域最前面,但是不调用函数

<!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>Document</title>
    <script>
        fun();
        function fun(){
            console.log(1);
        }
    </script>
</head>
<body>
    
</body>
</html>

在这里插入图片描述
案例:

f1();
        console.log(c);
        console.log(b);
        console.log(a);
        function f1() {
            var a = b = c = 9;//var a=9; b=9;c=9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
 

在这里插入图片描述

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

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

相关文章

【数据结构与算法——C语言版】2. 数组

前言 本篇文章介绍了数组的基础定义及使用&#xff0c;并针对数组的基本增删改查做了一些代码示例&#xff0c;下篇文章将讲解基于数组的更高效的方法&#xff0c;比如二分查找、插入排序等。 数组基础 数组定义 int nums[10] {0};如上&#xff0c;定义一个int类型的数组&…

【Python百日进阶-数据分析】Day146 - plotly小提琴图:px.violin()/go.violin()

文章目录四、实例4.1 Plotly Express 的小提琴图4.1.1 Plotly Express 的基本小提琴图4.1.2 带框和数据点的小提琴图4.1.3 多个小提琴图4.1.4 叠加的小提琴图4.2 graph_objects的小提琴图4.2.1 基本小提琴图4.2.2 多条小提琴迹线4.2.3 分组小提琴图4.2.4 分裂小提琴图4.2.5 高级…

植物大战僵尸:寻找召唤僵尸关键CALL

通过遍历寻找召唤僵尸的CALL&#xff0c;通过调用CALL出现自定义的僵尸&#xff0c;加速僵尸的出现。我们可以通过僵尸出现在屏幕中的个数来遍历寻找僵尸出现的CALL 僵尸CALL的遍历技巧&#xff1a;首先打开CE->进入游戏开始新的游戏-> 直接搜索未知初始化数据等待出现第…

新手程序员入职新公司,该如何快速上手?

小C今天又来找我了&#xff0c;一脸不开心的样子&#xff0c;我心想不是刚被开除&#xff0c;不会这么快又被开除了吧。 小C对我说&#xff1a;下周马上要入职新公司了。 我&#xff1a;好事啊&#xff0c;怎么一脸不开心的。 小C&#xff1a;马上要入职新公司了&#xff0c…

Altium Designer 20 凡亿教育视频学习-04-2

屏蔽电源线或者我们想要屏蔽的线&#xff0c;只显示我们想要的线 PCB上都是线会妨碍我们布线&#xff0c;因此在分模块的布置器件时&#xff0c;我们只单纯的显示我们需要的模块线&#xff0c;其他的线路就不显示了。白线叫预拉线&#xff0c;就是你真实的线要连的两个地方 第…

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程 今天小编分享纳米金对于R-藻红蛋白的反应&#xff0c;一起看看吧&#xff1a; 纳米金修饰藻红蛋白的制备过程&#xff1a; 取不同pH条件下金前驱体溶液20 mL&#xff0c;先加入质量分数为2%的稳定剂(PVP&am…

高校房产管理系统使用环境?

数图互通高校房产综合管理信息系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解…

redis 持久化

文章目录一、什么是redis持久化二、两种持久化机制三、RDB(Redis DataBase) 内存快照RDB 原理RDB的触发方式RDB的数据恢复&#xff1a;RDB的优点RDB的缺点四、AOF(Append Only File) 增量日志AOF 原理AOF的触发方式AOF 重写机制AOF的优点AOF的缺点一、什么是redis持久化 redis…

JavaEE【Spring】:SpringBoot 统一功能处理

文章目录前言一、用户登录权限效验1、最初用户登录验证2、Spring AOP 用户统⼀登录验证的问题3、Spring 拦截器① 自定义拦截器② 将自定义拦截器加入到系统配置4、拦截器实现原理① 实现原理源码分析② 拦截器小结5、扩展&#xff1a;统⼀访问前缀添加二、统⼀异常处理1、使用…

系分 - (软件)需求工程

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - (软件)需求工程考点摘要需求工程需求开发&#xff08;主线&#xff0c;目标&#xff09;需求分类领域工程PIECES框架需求获取需求记录技术需求分析结构化分析方法 - SASA - 数据字典SA - 数据流图D…

浅谈Web缓存

Web缓存分为两类 http缓存浏览器缓存 1、缓存位置 Service WorkerMemory CacheDisk CachePush Cache 2、浏览器缓存分为三类 cookielocalStroragesessionStorage cookie的最大容量为4kb, localStorage, sessionStorage容量为5M localStorage可永久存储, 除非调用API删除或…

【Linux编译器-gcc/g++使用】

1. 背景知识1. 预处理&#xff08;)2. 编译&#xff08;)3. 汇编&#xff08;&#xff09;4. 连接&#xff08;)有关具体详解可以参照这篇博客&#xff1a;程序环境与预处理2. gcc如何完成格式 gcc [选项] 要编译的文件 [选项] [目标文件]2.1预处理&#x1f4d9;功能&#x1f4…

11_1、Java集合概述

一、Java集合框架概述 一方面&#xff0c; 面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象 的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊 端&#xff0c;而Java 集合就像一种容器&#xff0c;可以动…

【自学Java】Java语言数组赋值

Java语言数组赋值 Java数组赋值教程 在 Java 语言 中&#xff0c;给 数组 赋值&#xff0c;就相当于给每个位置上的对应的位置填充数据。 Java语言数组赋值详解 Java 中的数据赋值分为动态化赋值和静态化赋值两种赋值方式。动态化赋值指的是先定义数组&#xff0c;然后指定…

Unity github发布 和 gitignore文件的详细设置

你做了一个unity项目 想给他提到github上去 如果你是windows 他会不停提示你 warning: LF will be replaced by CRLF in ***** The file will have its original line endings in your working directory 提示这个是因为 windows和其他平台的换行符不一样导致的 git想给你改换行…

PDF转换成Word转换器,这个软件实在太好用了!

在办公中我们会发现&#xff0c;我们每天需要处理的文件实在是太多了。大部分时间里我们都在跟各种各样的文件打交道&#xff0c;有部分文件内容很接近&#xff0c;甚至只是转换了输出格式而已&#xff0c;其具体内容并没有发生改动。那当我们想要直接使用它的另一种格式的时候…

ArcGIS三维制作步骤发布时间:

ArcGIS三维制作步骤发布时间&#xff1a;2018-01-17 版权&#xff1a;同步视频教程&#xff08;一)&#xff1a;http://www.bigemap.com/video/play2018022687.html&#xff08;二&#xff09;&#xff1a;http://www.bigemap.com/video/play2018022686.html&#xff08;三&…

电脑死机怎么办?超级简单的方法

当我们的电脑运行多个软件的时候&#xff0c;就会很容易发生死机。如果是台式电脑&#xff0c;我们可以通过按重启按钮&#xff0c;或者是通过直接拔电源来解决死机的问题。 如果是笔记本电脑&#xff0c;我们怎么按鼠标或者电脑的键盘&#xff0c;它都没有反应。电脑死机怎么…

Ubuntu 20.04源码编译安装OpenCV 4.7.0

目录 前言 1--下载OpenCV 4.7.0 2--编译安装OpenCV 4.7.0 3--测试 3-1--查看安装的版本 3-2--基于VSCode和CMake测试项目 4--报错解决&#xff08;重点&#xff01;&#xff09; 4-1--OpenCV与FFmpeg不兼容 4-2--LIBTIFF报错 4-3--系统与Anaconda的库lib冲突 4-4--测…

MATLAB-罗盘图绘制

compass 函数用于绘制罗盘图&#xff0c;利用直角坐标系&#xff0c;在圆形栅格上绘制图形&#xff0c;整个形状类似一个“罗盘”&#xff0c;具体使用格式如下。1 ) compass( x , y):函数绘制一个由原点出发、由(x ,y)组成的向量箭头图形。2 ) compass( z):等价于compass( rea…