当前位置: 首页 > article >正文

js 作用域

1.声明提前


变量的声明提前:使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),但是如果声明变量时不使用var关键字,则变量不会被声明提前
函数的声明提前:使用函数声明形式创建的函数 function 函数名(){} ,它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数。使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用
 

2.作用域

2.1、全局作用域


直接编写在script标签中的JavaScript代码,都在全局作用域
全局作用域在页面打开时创建,在页面关闭时销毁
在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
在全局作用域中:
创建的变量都会作为window对象的属性保存
创建的函数都会作为window对象的方法保存
全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到

注:赋值不行,会报错


2.2、函数作用域


调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
每调用一次函数就会创建一个新的函数作用域,它们之间是互相独立的
在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量
在函数中要访问全局变量可以使用window对象
作用域链:当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找,直到找到全局作用域,如果全局作用域中依然没有找到,则会报错ReferenceError


2.3、作用域链


多个上下级关系的作用域形成的链,它的方向是从下向上的(从内到外),查找变量时就是沿着作用域链来查找的。

查找一个变量的查找规则:

在当前作用域下的执行上下文中查找对应的属性,如果有直接返回,否则进入2
在上一级作用域的执行上下文中查找对应的属性,如果有直接返回,否则进入3
再次执行2的相同操作,直到全局作用域,如果还找不到就抛出找不到的ReferenceError异常
 


http://www.kler.cn/a/6958.html

相关文章:

  • 51单片机基础01 单片机最小系统
  • WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
  • 理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
  • 十二:HTTP错误响应码:理解与应对
  • Mac——基本操作使用整理
  • Spring Events在大型项目中的最佳实践
  • 【JAVA程序设计】(C00125)基于Springboot的人事管理系统
  • 电流互感器校验台TI5300交直流电流传感器检测装置
  • ChatGPT扩展系列之ChatGPT for Google
  • 基于粒子群算法的含风光燃储微网优化调度
  • 使用js实现任意元素均可全屏显示的插件,提供vue自定义指令,开箱即用
  • 2023.4.2 卷积到底是个啥?
  • 脂肪酸脂质Myristic acid PEG NHS,Myristic-acid PEG NHS ester,肉豆蔻酸PEG活性酯,具有优异疏水性
  • 项目 TO 的自我修养
  • Centos8中安装Docker
  • Linux SSH失效的几种情况以及排查方法
  • 在线直播源码系统架构设计
  • 战略应对:如何利用TOOM舆情监控预测市场趋势,抢占商机?
  • CMake入门教程【基础篇】2.aux_source_directory添加源文件
  • 如何将独热标签还原为字符串标签?
  • 要不要限制 AI?我们把与 GPT-4 有关的观点收集全了
  • 为什么Elasticsearch7.x把type给干掉了?
  • Chrome扩展程序实现网页翻译
  • Python求解线性方程组
  • DETR代码学习(五)之匈牙利匹配
  • 最大连通块之DFS,BFS