JavaScript中作用域问题讨论及示例代码探究
admin
2024-03-07 18:11:25
0

文章目录

  • 作用域
    • 1 函数作用域
    • 2 作用域链
    • 3 练习

作用域

  • 作用域指的是一个变量的可见区域
  • 作用域有两种:
    • 全局作用域
      • 全局作用域在网页运行时创建,在网页关闭时销毁
      • 所有直接编写到script标签中的代码都位于全局作用域中
      • 全局作用域中的变量是全局变量,可以在任意位置访问
    • 局部作用域
      • 块作用域
        • 块作用域是一种局部作用域
        • 块作用域在代码块执行时创建,代码块执行完毕它就销毁
        • 在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问

1 函数作用域

  • 函数作用域也是一种局部作用域
  • 函数作用域在函数调用时产生,调用结束后销毁
  • 函数每次调用都会产生一个全新的函数作用域
  • 在函数中定义的变量是局部变量,只能在函数内部访问,外部无法访问
function fn(){let a = "fn中的变量a"console.log(a)
}fn()
console.log(a) // undefined 

2 作用域链

当我们使用一个变量时,JS解释器会优先在当前作用域中寻找变量,就近原则

  • 如果找到了则直接使用
  • 如果没找到,则去上一层作用域中寻找,找到了则使用
  • 如果没找到,则继续去上一层寻找,以此类推
  • 如果一直到全局作用域都没找到,则报错 xxx is not defined

参照下面的例子理解

报错的原因看下一节提升相关概念

let a = 10{console.log(a) // 报错,Cannot access 'a' before initializationlet a = "第一代码块中的a"console.log(a) // "第一代码块中的a"{console.log(a) // 报错,Cannot access 'a' before initializationlet a = "第二代码块中的a"console.log(a) // "第二代码块中的a"}console.log(a) // "第一代码块中的a"
}
console.log(a) // 10
let b = 33function fn() {console.log(b) // 报错,Cannot access 'b' before initializationlet b = 44console.log(b) // 44function f1() {console.log(b) // 报错,Cannot access 'b' before initializationlet b = 55console.log(b) // 55}f1()
}fn()

3 练习

练习1

var a = 1function fn() {a = 2console.log(a) // 2
}fn()
console.log(a) // 2

练习2

var a = 1function fn() {console.log(a) //undefinedvar a = 2console.log(a) // 2
}fn()
console.log(a) // 1

练习3

var a = 1function fn(a) {console.log(a) //undefineda = 2 	// 修改的是形参console.log(a) // 2
}fn()
console.log(a) // 1

练习4

var a = 1function fn(a) {console.log(a) //10a = 2console.log(a) // 2
}fn(10)
console.log(a) // 1

练习5

var a = 1function fn(a) {console.log(a) //1a = 2console.log(a) // 2
}fn(a)
console.log(a) // 1

练习6

console.log(a)  // a指向的是第五行的函数,var只是声明,并不赋值,如果声明过不会重复赋值var a = 1
console.log(a) // 1
function a() {alert(2)
}
console.log(a) // 1
var a = 3
console.log(a) // 3
var a = function () {alert(4)
}
console.log(a) // 打印11行函数
var a	// 已经声明过了,根本不执行
console.log(a) // 打印11行函数

相关内容

热门资讯

提前布局硬科技企业,银行系“耐... 国产DRAM龙头长鑫科技7月16日启动科创板新股申购。招股书显示,金融资产投资公司(AIC)等银行系...
沈阳本地有哪些可满足小单需求的... 沈阳本地定制服装行业需求现状 近年来沈阳本地各类企事业单位的文化建设、活动筹办、员工工装配置需求处于...
25.47万亿元!上半年外贸创... 本报(chinatimes.net.cn)记者张智 北京报道 尽管今年外部环境复杂多变,但我国进出口...
四季陪伴 | 资产配置策略真的... 来源:中信银行微生活 01 一个无法回避的问题 2026年上半年结束了。打开账户,很多持有“四季组...
神秘大资金出手了。。 大资金再出手! 时隔15个月,ETF市场再现神秘资金抄底行情。 仅两个交易日,全市场股票ETF净流入...
梁文锋登顶全球大模型首富 据7月15日更新的彭博亿万富翁指数最新数据,DeepSeek创始人梁文锋以360亿美元净资产位列全球...
中央通报3起典型问题:国企投资... 2026年7月15日,中央层面整治形式主义为基层减负专项工作机制办公室和中央纪委办公厅公开通报3起整...
7月15日主题复盘 | 医药股... 一、行情回顾 市场全天震荡调整,科创50指数跌超4%。医药股逆势走强,迪哲医药、博瑞医药、昭衍新药等...
原创 莫... 印度这次跟美国的贸易谈判,摆出的架势让我们看了直摇头。莫迪政府张口就要"比中国还低的关税待遇",这个...
原创 今... 家人们谁懂啊,今早6点刷到的黄金分析还写着「4100横盘待变,4021是铁底」,结果8点半美国6月C...
近3亿套现落空!零售巨头物美集... 图片来源:图虫创意 横跨南北多省布局、拥有多个连锁品牌的老牌零售巨头——物美科技集团有限公司(以下简...
常州第一大独角兽企业:估值30... 根据胡润研究院的界定,独角兽企业指的是成立于2000年之后、估值超过10亿美元的非上市企业。这类企业...
长鑫科技回应董事长发股权激励,... 7月15日下午,存储厂商长鑫科技召开网上投资者交流会,该公司董事长朱一明在与投资者的交流中谈及公司登...
原创 D... 彭博、《金融时报》近期同步曝光,曾经宣称 “不融资、不上市、不商业化” 的 DeepSeek,正式推...
原创 7... 科创板史上最大IPO的发行价终于落地了。 长鑫科技每股定在8.66元,刚好卡在市场之前预测的7-10...
002731连续15个跌停后巨... 文/帅可聪 7月15日,在连续15个交易日跌停后,*ST萃华(002731.SZ)股价盘中出现异动。...
原创 4... 那个被全球资本疯狂追逐的电商巨头,终于要IPO了。 作者 | 云帆 来源 | 投资家(ID:touz...
上半年我国芯片日均产量超15亿... 国家统计局新闻发言人、国民经济综合统计司负责人王冠华7月15日在国新办新闻发布会上表示,今年上半年,...
从百人团队到近7000人!小米... 八载深耕积淀,科创步履不停。7月15日,小米集团华东总部迎来8周年生日。南京建邺区相关领导、小米集团...
原创 重... 2026年7月13日,国务院正式批复了《扩大消费"十五五"规划》。 目标写得明明白白,到2030年,...