Javascript基础第六天知识点以及案例:作用域、JS预解析、对象

2023-11-15

作用域目标

  • 能够说出 JavaScript 的两种作用域
  • 能够区分全局变量和局部变量
  • 能够说出如何在作用域链中查找变量的值

1. 作用域

1.1 作用域概述

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

JavaScript(es6前)中的作用域有两种:

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

1.2 全局作用域

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件。

var num = 10;
var num = 30;
console.log(num);

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

作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。

function fn() {
   
	// 局部作用域
	var num = 20;
	console.log(num);
}
fn();

1.4 JS 没有块级作用域(了解)

  • 块作用域由 { } 包括。
  • 在其他编程语言中(如 java、c#等),在 if 语句、循环语句中创建的变量,仅仅只能在本 if 语句、本循环语句中使用

如下面的Java代码:

if(true){
   
int num = 123;
system.out.print(num); // 123
}
system.out.print(num); // 报错

Js中没有块级作用域(在ES6之前)。

if(true){
   
var num = 123;
console.log(123); //123
}
console.log(123); //123

2. 变量的作用域

2.1 变量作用域的分类

在JavaScript中,根据作用域的不同,变量可以分为两种:

  • 全局变量
  • 局部变量

2.2 全局变量

在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)

  • 全局变量在代码的任何位置都可以使用
  • 在全局作用域下 var 声明的变量 是全局变量
  • 特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)
var num = 10; // num就是一个全局变量
console.log(num);

function fn() {
   
	console.log(num);
}
fn();

2.2 局部变量

在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)

  • 局部变量只能在该函数内部使用
  • 在函数内部 var 声明的变量是局部变量
  • 函数的形参实际上就是局部变量
function fun(aru) {
   
	var num1 = 10; // num1就是局部变量 只能在函数内部使用
	num2 = 20;
}
fun();

2.3 全局变量和局部变量的区别

  • 全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
  • 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被
    销毁,因此更节省内存空间

3. 作用域链

  • 只要是代码,就至少有一个作用域
  • 写在函数内部的局部作用域
  • 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
  • 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称 作作用域链

案例 1: 结果是几?

function f1() {
   
	var num = 123;
	function f2() {
   
		console.log( num );
	}
	f2();
}
var num = 456;
f1();

案例分析
在这里插入图片描述
作用域链:采取就近原则的方式来查找变量最终的值。
答案是:123。

案例 2: 结果是几?

var a = 1;
function fn1() {
   
	var a = 2;
	var b = '22';
	fn2();
	function fn2() {
   
		var a = 3;
		fn3();
		function fn3() {
   
			var a = 4;
			console.log(a); //a的值 ?
			console.log(b); //b的值 ? 
		} 
	} 
}
fn1();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript基础第六天知识点以及案例:作用域、JS预解析、对象 的相关文章

随机推荐

  • 第四课:循环(一遍又一遍/重复/啰嗦)结构

    第四课 循环 一遍又一遍 重复 啰嗦 结构 一 掌握while循环结构 其次于for 1 初始化循环变量 xxxxx 2 循环条件 while 条件表达式 3 循环操作 循环体 4 更新循环变量 循环出口 二 掌握do while循环 前期
  • Unity游戏开发面试问题总结(含答案)

    马上金九银十了 今天就来给大家说说关于面试题的内容 给大家整理了9道Unity面试基本都会问到的问题 初衷也很简单 就是希望在面试的时候能够帮助到大家 减轻大家的负担和节省时间 对于没有跳槽打算的也可以复习一下相关知识点 就当是查缺补漏 1
  • Python时间序列分析3-非平稳序列的随机分析-SRARIMA

    import pandas as pd import matplotlib pyplot as plt import numpy as np from datetime import datetime timedelta from time
  • 数据挖掘中基本概念--数据类型的属性与度量

    当我们在学习数据挖掘算法或者机器学习算法时 我们都会发现某些算法只能应用于特定的数据类型 所以在学习数据挖掘算法或者机器学习算法前我们需要对数据类型的属性度量有一个很清晰的了解 如果在数据类型这一步就出现问题 不管算法再怎么优异肯定也是白搭
  • 江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...

    一 选择题 1 设有函数定义 A B C D 答 A 则以下对函数sub 的调用语句中 正确的是 解析 函数的参数有两个 第一个是整型 第二个是字符类型 在调用函数时 实参必须一个是整型 一个是字符型相容的类型 整型 A 项中97为字符传入
  • NotePad++安装HEX-Editor插件

    在菜单栏点击插件 插件管理 搜索HEX Editor并打钩 点击安装 然后重新打开notepad 会发现工具栏多了一个H的符号 此时点击H 即可以16进制的形式读取当前文件 还是没有的话建议多试几次
  • Excel通用表头及单元格合并

    要在Java中实现XLS文件中的通用表头合并和单元格合并 您可以使用Apache POI库 下面是一个示例代码 展示了如何实现这两个功能 import org apache poi hssf usermodel import org apa
  • WIFI连接之WPA3-SAE介绍

    WPA3 SAE是WiFi Protected Access 3 Simultaneous Authentication of Equals 同等同时认证 的缩写 它是一种更安全的无线网络加密标准 用于保护WiFi网络的安全性和隐私 WPA
  • slf4j日志写文件配置

    logback spring xml 配置代码如下
  • css 文字两端对齐

    1 需求是这样的 用div css实现一个表单 要求表单中 输入框前面的label文字都两端对齐 效果如下 2 先贴出html代码 div class item box span 姓名 span div
  • 基于Linux及QT的即时通信系统的设计与实现

    基于Linux及QT的即时通信系统 写在前面 开发环境 系统概述 数据库表设计 服务器的数据库表 客户端的数据库表 实现结果 服务器效果展示 客户端效果展示 代码解释 服务器端代码 写在最后 写在前面 刚刚做完毕设 论文也查完重 有了时间写
  • 【LeetCode1114】按序打印————多线程

    思想 利用锁建立屏障 1 题目描述 我们提供了一个类 public class Foo public void one print one public void two print two public void three print
  • redis分布式锁的演变过程

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 直接添加Redis缓存 二 使用setnx执行抢锁过程 三 setnx获取锁 设置过期时间 四 引入UUID解决误删锁问题 五 引入Lua脚本来做删除 六 对递
  • element UI el-select 绑定值为对象时设置默认值

    适用场景描述 在项目中实现编辑功能时 如页面存在下拉框且下拉框的数据在点击相应的select时进行调用 在编辑时可能需要修改部分数据 而且存在部分下拉数据并不是必选项 如果直接获取所有的下拉数据 可能会造成浪费 需要在下拉框内显示已有的值作
  • 文件夹正在使用,无法删除 无法重命名等操作怎么办?

    大家好 我是Q站小编鹏仔 平时大家使用电脑删除临时文件夹或修改文件夹名称时 会提示 文件夹正在使用 操作无法完成 因为其中的文件夹或文件已在另一程序中打开 请关闭该文件夹或文件 然后重试 如下图所示 很多人就遇到这中问题 会发现我目前并未打
  • 插入排序的几种优化及测试结果

    插入排序很简单的了 于是我将算法的优化的第一站选在了这里 编程珠玑 在第十一章就首先讨论了这个问题 我写的基本版本 void insertSort1 int a int len int i int j int tmp for i 1 i l
  • Intellij IDEA 插件开发秘籍

    来这里找志同道合的小伙伴 这里总结一下 Intellij IDEA 插件开发的知识 供大家参考 本篇文章包含以下内容 开发环境搭建 Component 介绍 Extension Point And Extension 介绍 Service
  • 遥感+python 1.4 RPC校正

    遥感 python 1 4 RPC校正 目录 遥感 python 1 4 RPC校正 一 正射校正 二 RPC校正原理 三 代码实现 本章节 笔者主要讲述RPC校正的概念 原理 即代码实现 一 正射校正 正射校正一般是通过在像片上选取一些地
  • 【数据结构】有向无环图

    有向无环图 若一个有向图中不存在环 则称为有向无环图 简称DAG图 举例 比如有一棵树长这样 我们会发现它有重复的地方 将这两部分合并 还是有重复的地方 再次合并 总结规律 有向无环图中 未知变量不能重复 比如上例 只会有一个a b c d
  • Javascript基础第六天知识点以及案例:作用域、JS预解析、对象

    作用域目标 能够说出 JavaScript 的两种作用域 能够区分全局变量和局部变量 能够说出如何在作用域链中查找变量的值 1 作用域 1 1 作用域概述 通常来说 一段程序代码中所用到的名字并不总是有效和可用的 而限定这个名字的可用性的代