前端面试题: 请解释什么是函数的作用域?

news2024/11/24 17:29:40

今天做到了一道题:请解释什么是函数的作用域?

我给的答案是:

函数的作用域是指函数执行到内部后创建的数据空间,在函数的作用域内,let定义的变量的有效期为函数作用域

AI觉得我答得比较简单:回答基本正确,但可以补充更多细节来提高回答质量。

正好就查一下,函数作用域在javascript里到底是什么。

经查实,前端考察作用域主要考察的是一种例外情况,就是在函数内的块里面定义的变量可能被抬升到函数级别的问题,例如下面的golang例子

var a = 1

func TestScope(t *testing.T) {
	//测试golang的作用域
	t.Log("a=", a)
	if true {
		var a = 2
		t.Log("a=", a)
	}
}

打印为:

test.go:29: a= 1

test.go:32: a= 2

第一次打印时,a应该是全局的第一行定义的a,所以打印1

第二次,在if这个独立的作用域里面定义了一个a,覆盖了全局的a,所以第二个打印,a=2

再来看对应的javascript版本

var var_a = 1
function test_Scope(){
	console.log(var_a)
	if (true){
		var var_a = 2
		console.log(var_a)
	}
	logc()
}
var var_a = 1
function test_Scope(){
	console.log(var_a)
	if (true){
		var var_a = 2
		console.log(var_a)
	}
}
test_Scope()

打印却是:

这里面第一次打印的时候,按其他语言应该还是全局的1才对,但是因为javascript把函数里面所有定义过的变量都放在了一个统一的函数作用域里面,使得这时,运行时认为var_a已经有了,只是还未赋值。

同样的问题在循环里也有

for (var i = 0; i < 10; i++) {    
    console.log(i);    
}    
console.log(i);  // 10 i只是for里面的函数,按道理在这里应该是undefined

而我回答的let确实是为了解决这个问题存在的:

来看上面的程序的let版本

let var_a = 1
function test_Scope(){
	console.log(var_a)
	if (true){
		let var_a = 2
		console.log(var_a)
	}
}
test_Scope()

打印则变成了

这就和其他语言的定义一致了。

所以如果再答我认为应该这样回答:

函数的作用域是指函数执行到内部后创建的数据空间,在函数的作用域内,var定义的变量具有相同的共同作用域,let定义的变量只有块状定义域,从定义语句开始,到所属的大括号结束,编写程序时应注意javascript和其他语言的不同,避免造成定义不一致的问题。

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

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

相关文章

使用 OpenWRT 设置 Banana Pi BPI-R3开源硬件路由器

这里介绍如何使用 pfSense 将ZimaBoard 216设置为防火墙的链接。我们正在为小型板计算机建立一个专用网络&#xff0c;这样当我开始教授 Linux 时&#xff0c;我就可以显示和共享它的 IP。 现在为我的网络设置一条到 pfSense 后面的路由。这是为了提供另一个级别的安全性。我有…

Ubuntu22.04 vnc远程黑屏

一、原因 原因是Ubuntu22.04使用的gnome启用了Wayland。vnc、teamviewer、向日葵、todesk等均无法使用或者远程黑屏等。 简单的说vnc、teamviewer、向日葵、todesk等均基于xorg实现&#xff08;xorg太流行&#xff09;&#xff0c;并不兼容Wayland&#xff0c;所以vnc无法正常…

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…

DirectX12架构理解

无它&#xff0c;一图而已

Python - FastAPI 实现 get、post 请求

目录 一.引言 二.FastAPI Server 构建 1.get - read_items 2.post - create_item 3.uvicorn - run_app 三.Postman 请求 1.post - create_item 2.get - read_items 四.Requests 请求 1.post - create_item 2.get - read_items 五.总结 一.引言 前面介绍了 LLM 的相…

前端解决页面访问总是自动弹出 浏览器的 翻译此页 问题

今天克隆了一个项目下来 结果 浏览器自带的 翻译此页总会默认弹出 还一直以为是js设置的 结果最后才发现 这是个基础设置 在于 html标签的 lang 属性 这里设置了 en 他就会每次启动都弹出来 只需要改成langzh-CN 再次运行 就不会在弹出来了

恒合仓库 - 商品管理模块、上传照片、添加采购单、添加出库单、商品分类

商品管理模块 文章目录 商品管理模块一、分页查询商品1.1 实体类1.1.1 Store 仓库1.1.2 Brand 品牌1.1.3 ProductType 商品分类1.1.4 Supply 供应商1.1.5 Place 产地1.1.6 Unit 单位1.1.7 Product 商品 1.2 查询所有仓库1.2.1 Mapper1.2.2 Service1.2.3 Controller1.2.4 效果图…

基于宏基因组的功能挖掘:碳水化合物活性酶(CAZymes)注释

基于宏基因组数据&#xff0c;可以通过NR数据库进行物种注释&#xff0c;还可以进行功能挖掘&#xff0c;比如通过KEGG数据库来挖掘代谢通路、根据COG注释结果对蛋白进行功能归类&#xff0c;通过CAzyme可以得到碳化合物合成、代谢、转运等酶的分类和相关信息&#xff0c;通过P…

Echarts散点图筛选新玩法dataZoom

目录 前言 一、引入Echarts5.4.3 二、新建index.html 三、绑定Echarts展示元素 四、初始数据绑定 五、option设置 六、效果展示 七、参数说明 总结 前言 如果您在日常的工作当中也会遇到如下场景&#xff0c;需要在线对已经展示出来的图表进行进一步的筛选&#xff0c…

ASL集睿致远代理商,CS5366芯片,typec转HDMI 4k60Hz带PD快充方案

CS5366是一款Type-C/DP1.4到HDMI2.0的显示协议转换芯片&#xff0c;内部集成了PD3.0及DSC decoder, 并能按客户需求配置成不同的功能组合&#xff0c; 是目前集成度与功耗最小的一颗芯片。 CS536x主要特性 1. 业界最低功耗的Type-C to HDMI2.0 4K60产品 (<300mW)。 2. 集成D…

R读写parquet文件

什么是parquet文件 Apache Parquet是一个开源的&#xff0c;列存储的数据文件格式。 https://parquet.apache.org/ 在R里面&#xff0c;我们可以通过arrow包来读写它。 我们先安装一下arrow包&#xff0c;并加载它。 install.packages("arrow") library(arrow)读写…

[CISCN2019 华东南赛区]Web11 SSTI

这道SSTI 差点给我渗透的感觉了 全是API 我还想去访问API看看 发现这里读取了我们的ip 我们抓包看看是如何做到的 没有东西 我们看看还有什么提示 欸 那我们可不可以直接修改参数呢 我们传递看看 发现成功了 是受控的 这里我就开始没有思路了 于是看了wp 说是ssti 那我们看…

buuctf-[WUSTCTF2020]朴实无华

打开环境就这么一句话 先打开index.php,但是没有什么 查看了下网络 看到gzip和php 我试了试www.zip 还有index.phps&#xff0c;也是一样的&#xff0c;都没找到文件 于是我想到用御剑扫&#xff0c;但是我好像线程太长了&#xff0c;一个没扫到&#xff0c;我就想到用dirsea…

阿里云ACE认证的含金量高吗?如何通过ACE认证考试?

在当今的社会中&#xff0c;想要获得一份好工作、得到丰厚的报酬&#xff0c;唯一的方法就是证明自己优秀&#xff0c;能给公司创造价值&#xff0c;是大多数公司想要看到的。 那么在面试过程中&#xff0c;怎么样才能让面试官一眼就记住呢&#xff1f;那一定是有一份足够优秀…

c语言基础知识+OS+数据结构

c语言&#xff1a; memory section&#xff1a; .bss .data .text C语言编译流程&#xff1a; pre-compiler: compiler: 检查语法问题 link: 将symbol转化为实际函数/变量地址&#xff0c;map file里面可以看到 预编译在做什么&#xff1a; &#xff08;#define&#x…

Unity3D C# 反射与特性的配合使用

需求分析 情况&#xff1a; 假如我们是一个动物园的管理员&#xff0c;我们需要统计园内的所有动物和动物的行为。 举例&#xff1a; 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌&#xff0c;狗对应狗吠和干饭&#xff0c;鸡对应篮球和打鸣那么这时候我要统计这些&a…

【开发】视频监控系统/视频汇聚平台EasyCVR平台页面展示优化

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

怎么绘制骑鹅旅行记思维导图?教你这样绘制

怎么绘制骑鹅旅行记思维导图&#xff1f;骑鹅旅行记是一本经典的童话故事&#xff0c;绘制这个故事的思维导图可以帮助我们更好地理解故事情节和角色关系。那么今天就给大家介绍一种快速且简便的方法来绘制思维导图。 我们可以使用【迅捷画图】来进行制作&#xff0c;这是一种功…

深度学习笔记之优化算法(一)铺垫:梯度下降法VS最速下降法

深度学习笔记之优化算法——铺垫&#xff1a;梯度下降法VS最速下降法 引言回顾&#xff1a;条件数范数 相关描述关于梯度下降法最速下降法单位范数的描述 梯度下降法VS最速下降法梯度下降法等价于最速下降法的情况欧式范数约束产生的更新方向可能不是最优方向梯度下降法与最速下…

RayViz 一款服务于SolidWorks用于光学和机械设计的有效工具

RayViz 作为 SolidWorks 的一个扩展插件&#xff0c;不仅可以在 SolidWorks 工作环境中直接定义和保存模型光学属性&#xff0c; 而且还可以在该 CAD 工作环境中直接进行光线追迹。通过 RayViz, 把 TracePro 和 Solidworks 链接了起来&#xff0c; 一个模型可以在 TracePro 中用…