Js代码执行时的那点事儿

腾讯笔试题(JavaScript预解析和逐步执行) 以下代码执行结果是什么 <script> console.log(a); var a = 1; console.log(a); function a(){console.log(2)} console.log(a); var a = 3; console.log(a); function a(){console.log(4)} console.log(a); a() </script> 执行结果 阅读详情

在一些笔试的题中,有可能会出现类似下面这么一道题

console.log(a)
a(4);
var a=1;
console.log(a);
function a() {
    console.log(2);
}
console.log(a);
var a=3;
console.log(a);
function a(b) {
    console.log(a,b);
    a=5
    console.log(a);
}
a();
console.log(a);

作为一个前端的小白,表示这么多a,又是变量,又是函数的,看的真是累,没有什么头绪。那么下面就来捋一捋,到底这段代码执行的时候,发生了些什么。

首先得有一个“作用域”的概念,简单讲,就是“变量或者函数的有效作用范围”。接着来说一下,什么时候会进入到作用域中。只要记住以下两点即可:

  1. 当浏览器看到script标签的时候
  2. 调用方法时候

不用问为什么,浏览器就是这么做的。接着进入作用域后,发生了什么事情呢?

  1. js的预解析
  2. js逐行执行

一件一件事儿来说。首先是预解析,在这个过程中,还分成了两部分:

  1. 开辟一个空间
  2. 去找有没有var,有没有方法参数,如果有var,有方法参数,就把var和方法参数声明的变量赋值为undefined,去找有没有function,如果有function,就将整个function的内容存到空间。

讲完这些基本的,来看看具体到了代码中是什么情况。


上面的图应该挺清楚了,这也可以解释js的“声明提前”,“声明函数会比函数表达式先执行”之类的一些现象了,最上面的一堆a的例子就不仔细解释


js作用域常见面试题解析 console.log(a); var a=1; console.log(a); function a(){alert(2)} console.log(a); var a=3; console.log(a); function a(){alert(3)} console.log(a); console.log(a()) 阅读详情

相关推荐

JavaScript简介

计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器。翻译器翻译的方式有两种:一个是编译,另外一个是解释。两种方式之间的区别在于翻译的时间点不同编译器是在代码执行之前进行编译,生成中间代码文件解释器是在运行时进行及时解释,并立即执行(当编译器以解释方式运行的时候,也称之为解释器)

ernester的博客 2600

函数面试题

第一题 var a = 1; function b() { a = 10; return; function a() {} } b(); console.log(a); 输出: 1 第二题 function foo(){ function bar() { return 3; } return bar(); function ...

weixin_43750811的博客 596

【扫地机器人测试】

本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。

xuhuaiyaun的博客 1373

js函数笔试题

第一题 console.log(a) // undefined var a = 1; var getNum = function() { a = 2; } function getNum() { a = 3; } console.log(a) // 1 getNu...

HelloGad的博客 756

5分钟搞定mmdetection3d多模态推理可视化:从KITTI数据集到3D检测结果展示

本文提供了一份快速上手MMDetection3D进行多模态推理可视化的实战指南。文章详细介绍了从环境搭建、KITTI数据集准备,到模型选择、配置解析,再到执行多模态推理并生成3D检测结果可视化的完整流程,旨在帮助开发者在30分钟内快速验证模型并直观展示检测效果。

weixin_29051149的博客 250

【时间序列预测算法】——Holt-Winters算法介绍及代码实现

背景 一阶二阶三阶指数平滑方法拟合效果均较好,通过结合数据自然属性,数据自身、趋势变化、季节性,提出了这三个角度的衡量量,可以说,理解起来更自然、更亲切。 公式 一阶: sts_tst​是t时刻对xtx_txt​的估计值,这里只有一个参数α,是数据本身的平滑属性的体现。 二阶: 引入了时间趋势变量btb_tbt​,优化了一下一阶的公式。同时还可以预测t+m时刻的值: 三阶: 又引入了季节性周期描述变量ctc_tct​,优化了一下二阶的公式。同时还可以预测t+m时刻的值: NOTE:ct

BlackValley的博客 1万+

JS学习笔记

JS是什么? JS全称为javascript,他是一门编程语言。 1,js和html,css的对比 相同点:html,css,js代码都可以在浏览器中运行,html,css,js它们的运行环境是浏览器 不同点:html,css不是编程语言,而js是编程语言,js的运行环境也不只浏览器。 2,js可以做什么? js作为前端开发的语言,主要用于开发网站,app,小程序等,node.js也可以进行后端程序的编写。 3,js写在哪? 1,js可以直接写在html中的script标签中(但一般不这样用,小型的简单界面

qq_43807392的博客 1062

Windows系统3D Gaussian Splatting环境搭建全攻略:从零开始到成功运行

本文详细介绍了在Windows系统上搭建3D Gaussian Splatting环境的完整流程,包括CUDA 12.6安装、Anaconda环境配置、代码获取与依赖安装等关键步骤。针对Windows平台特有的环境配置问题,提供了实用的解决方案和常见错误排查方法,帮助开发者快速实现3D Gaussian Splatting的成功运行。

weixin_30832143的博客 454

从浏览器到JS系列(一)JS引擎,JS虚拟机,JS运行时(5)

前文说了一堆关于JS引擎和JS虚拟机的,总的来说我个人感觉就是:JS引擎和JS虚拟机大多情况下这两者是可以混用的,或者说JS虚拟机是JS引擎的核心组件。在这种彼此概念有覆盖的情况下倒不用太纠结什么是什么,更值得重视的是做了什么。JS引擎/虚拟机主要作用是编译,执行JS代码。当然这个说法是很笼统的,后面会展开来写这个过程。 那什么是JS运行时?或者说什么是运行时 运行时,如果直译的话就是"运行的...

webwhite的博客 1045

13、基于RBF的自适应鲁棒控制与反步控制方法及实现

本文介绍了基于RBF神经网络的自适应鲁棒控制与反步控制方法,详细阐述了控制系统的程序结构、核心算法及实现流程。通过Simulink搭建仿真系统,利用RBF网络逼近系统中的不确定非线性函数,并结合Lyapunov稳定性理论设计控制律,实现了对倒立摆等复杂非线性系统的高精度跟踪控制。文章还提供了完整的MATLAB/Simulink代码示例和仿真结果分析,验证了该方法的有效性与鲁棒性,为实际工程应用提供了可行的技术路径。

ol789012的博客 88

让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent

摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 322

Javascript定时器那些事儿

一、什么是定时器 JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下 setTimeout: 设置一个定时器,在定时器到期后执行一次函数或代码段 var timeoutId = window.setTimeout(func[, delay, param1, param2, ...]); var timeoutId = w...

weixin_33711647的博客 834

RAG 提示词工程最佳实践

虽然目前网络上关于提示工程的相关资料已经多如牛毛,然而 RAG (检索增强生成) 任务中提示工程如何进行的资料相对而言却较少。不少朋友之前也热烈的讨论过 RAG 场景下提示词的运用,因此 Zen 禅与计算机程序设计艺术 特别推出 RAG 任务下的提示词实践经验系列分享。RAG 是检索增强生成(Retrieval Augmented Generation)的简称,是当前最火热的企业级LLM应用方案。

AI天才研究院 2013

【每日知识】关于Git那点事儿

版本和我们平常说的软件、游戏等的版本是一个意思,比如 2.2.8 版本、比如 第2版,比如webstorm2020。所以,版本指的就是代码编写进度当中的一些节点。比如一个项目:搭建好目录结构 — 第1版本完成登录页面布局 — 第2版本完成登录功能 — 第3版本完成分类页面布局 — 第4版本1.使用版本管理软件的必要性工作场景一:项目的需求不断的变化,改来改去,也可能需要改回原来的代码。使用版本管理软件可以对代码每次的改动做记录,记录一次,叫做形成一个版本。

2401_84435192的博客 332

【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例

WW、forever的博客 1422

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【js】setTimeout和for的那些事儿。

引出问题: 下面的代码,在浏览器中是怎么执行的? for(vari=0;i<5;i++){ setTimeout(function(){ console.log(i) },2000) } 答案: 间隔2s,同时打印5个5; 可能会有以下两个疑问: 1.为什么是同时打印? 2.为什么不是打印 0 1 2...

qq_34365469的博客 463

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

js作用域中的那些事儿(you don‘t know javascript)

在《你不知道的javascript(上)》中,了解到javascript在代码执行前会先对代码进行编译,引擎查找变量的过程中提到了LHS查询和RHS查询两个概念,下面就简单谈一下自己对其的理解: LHS查询:在查找变量中,如果查找的目的是为了给变量赋值(“=”),就会执行LHS查询。 RHS查询:在查找变量中,如果查找的目的是为了找到该变量是啥,就会执行RHS查询。 那么什么是作用域呢,作用

codesWay的博客 419

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

EventLoop那些事儿

Event Loop 在实践的过程中,你是否遇到过以下场景,为什么 setTimeout 会比 Promise 后执行,明明代码写在 Promise 之前。这其实涉及到了 Event Loop 相关的知识,我们来详细地了解 Event Loop 相关知识,知道 JS 异步运行代码的原理。 进程与线程 涉及面试题:进程与线程区别?JS 单线程带来的好处? 相信大家经常会听到 JS 是单线程执行的...

YauCheun的博客 245

[JavaScript学习笔记]预解析那些儿事儿(都是细节,我已收藏!)

预解析那些儿事儿预解析预解析案例1.结果是几?2.结果是几?3.结果是几?4.结果是几?对于结果是几?问题不明白的在评论区留言呀!我每天都在哦! 预解析 JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。 预解析 js引擎会把js 里面所有的var 还有function提升到当前作用域的最前面 代码执行,按照代码书写的顺序从上往下执行 预解析分为 变量预解析(变量提升) 和 函数预解析(函数

あなたの可愛い41 158

谈谈Android系统启动时的那点事儿

Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。一、启动BootLoader Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设...

weixin_30394633的博客 104

javascript定时器的那些事儿

一直认为学会的东西后来才发现了解的仅是一点点~还有很多需要我去了解、探索,从书籍、博客、团队的伙伴、视频等等一系列都可以学到很多。只要你想就会变得更加强大,不断积累自己吧~~~ 今天就了解一下定时器,先看看下面代码 document.onclick = function(){ setTimeout(function() { console.log("111");...

weixin_30332241的博客 116

JavaScript里BOM的那些事儿

BOM:浏览器对象模型 BOM的核心就是Window对象 window是浏览器内置的一个对象,里面包含着操作浏览器的方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //特殊的特质: //无处不在 //全局变量全部和window有

tony_yang6的博客 403

javascript主要用来做什么,javascript主要用于什么

JavaScript诞生于1995年,它的主要目的是处理以前由服务器端语言负责的一些输入验证操作。JavaScript是Web页面中的一种轻量级的脚本编程语言,也是一种通用的、跨平台的、基于对象和事件驱动并具有安全性的脚本语言快码论文。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序的“脚本”。

chatgpt001的博客 1035

YApi接口管理平台Mock功能远程代码执行漏洞深度解析

本文深度解析了YApi接口管理平台Mock功能中存在的远程代码执行漏洞。该漏洞源于自定义Mock脚本的沙箱逃逸,攻击者可利用JavaScript原型链污染获取Node.js全局对象,从而执行任意系统命令。文章详细阐述了漏洞原理、复现步骤、潜在危害(如数据窃取、内网渗透),并提供了紧急升级、网络隔离、权限控制等全方位的安全加固建议。

pz89012345的博客 174

JS(异步与单线程)

JS(异步与单线程)题目1.同步和异步的区别是什么,试举例(例子见知识点)区别:1.同步会阻塞代码执行,而异步不会2.alert 是同步,setTimeout 是异步题目2.关于 setTimeout结果:1 3 5 2 4题目3.前端使用异步的场景有哪些 1.定时任务:setTimeout,setInverval2.网络请求:ajax 请求,动态&lt;img&gt;加载3.事件绑定知识点一、什...

姜皓的博客 8953

JavaScript模板引擎原理,几行代码的事儿

转:http://www.kubiji.cn/juhe-id3400.html 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定。比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years...

chuyi8936的博客 154
上一篇: vue.js初学之组件props
下一篇: 正则表达式
Yvan_Lin
博客等级 码龄10年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值