复习面经哦
1.函数可以变量提升
JavaScript 中的函数存在变量提升的概念,这意味着在执行代码之前,函数声明会被提升到其作用域的顶部。这使得你可以在函数声明之前调用函数。然而,这种行为只适用于函数声明,而不是函数表达式。
下面是一些关于函数声明和函数表达式的示例来说明函数的变量提升:
1.函数声明:
add(2, 3); // 可以在函数声明之前调用function add(a, b) {return a + b;}
在这个例子中,add 函数在其声明之前被调用,这是因为函数声明会被提升到作用域的顶部。因此,即使在声明之前调用,函数仍然可以正常工作。
2.函数表达式:
subtract(5, 2); // 无法在函数表达式之前调用const subtract = function(a, b) {return a - b;};
在这个例子中,subtract 是一个函数表达式赋值给了一个变量。由于函数表达式是赋值语句的一部分,在执行到该语句之前无法调用函数,因此在函数表达式之前调用会导致错误。
需要注意的是,变量提升只适用于声明,而不适用于赋值。虽然函数声明会被提升,但函数表达式的变量本身(而不是赋值的函数)会被提升,值为 undefined。
console.log(foo); // 输出 undefined
var foo = function() {console.log('Hello');
};
在这个例子中,变量 foo 被提升,但它的值是 undefined,因为赋值语句 var foo = function() { ... } 并没有被提升。
综上所述,可以说 JavaScript 中的函数在变量提升方面具有特殊的行为,而函数声明会被完全提升,可以在声明之前调用。然而,函数表达式中的变量提升只包括变量本身,而不包括赋值的函数。因此,在编写代码时应注意变量和函数的定义顺序,以避免潜在的错误。
2.import 和 require
是 JavaScript 中用于导入模块的两种不同的语法,它们通常用于不同的模块系统。以下是它们的主要区别:
1.语法:
require 是 CommonJS 规范中使用的导入模块的语法。在 Node.js 环境中,你可以使用 require。
const module1 = require('module1');
import 是 ES6 (ECMAScript 2015) 中引入的语法,用于导入模块。在现代的前端开发中,特别是在使用 webpack、Babel 等工具时,常用 import。
import module1 from 'module1';
2.支持的环境:
require 是 CommonJS 规范的一部分,主要用于 Node.js 等服务器端环境。
import 是 ECMAScript 2015 (ES6) 的规范,主要用于现代的前端开发,同时也在一些服务器端环境中得到支持。
3.实时编译 vs 静态编译:
require 是在运行时动态加载模块的,模块的加载是实时的。
import 是在编译时进行的静态加载,模块的加载在代码执行前就完成了。
4.默认导出的处理:
在 CommonJS 中,require 是通过 module.exports 来导出模块的。
在 ES6 中,import 支持默认导出和命名导出,通过 export default 和 export 语法进行。
// CommonJS// module1.jsmodule.exports = { key: 'value' };// main.jsconst module1 = require('./module1');// ES6// module1.jsexport default { key: 'value' };// main.jsimport module1 from './module1';
总的来说,如果你在 Node.js 等服务器端环境中,可以使用 require;如果在现代前端开发环境,通常会使用 import。在一些现代的 Node.js 版本中也支持 import,但需要在模块文件中使用 .mjs 扩展名或者在 package.json 中配置 "type": "module"。不同的模块系统之间通常是不兼容的,因此在项目中应该根据使用的环境和工具选择适当的导入语法。
3.输出题
当面试官询问关于闭包、原型链、this 指向和异步的问题时,你可以准备一些相关的代码示例来说明这些概念。以下是一些可能的示例及其执行结果:
1.闭包:
function outerFunction() {let outerVar = 'I am outer';function innerFunction() {console.log(outerVar);}return innerFunction;}const inner = outerFunction();inner(); // 输出: "I am outer"
这个例子展示了闭包的概念。innerFunction 内部可以访问外部函数 outerFunction 中定义的 outerVar,即使在外部函数执行完毕后,innerFunction 仍然可以访问并引用 outerVar。
2.原型链:
function Animal(name) {this.name = name;}Animal.prototype.sayName = function() {console.log('My name is ' + this.name);};function Dog(name, breed) {Animal.call(this, name);this.breed = breed;}Dog.prototype = Object.create(Animal.prototype);const dog = new Dog('Buddy', 'Labrador');dog.sayName(); // 输出: "My name is Buddy"
这个例子展示了如何使用原型链创建对象。Dog 函数通过 Animal.call(this, name) 来调用 Animal 构造函数,并通过 Object.create(Animal.prototype) 来设置 Dog 的原型为 Animal 的实例,从而实现了继承。
3.this 指向:
const obj = {name: 'John',greet: function() {console.log('Hello, ' + this.name);}};const greetFunc = obj.greet;greetFunc(); // 输出: "Hello, undefined"
这个例子展示了 this 指向的问题。在 greetFunc 被调用时,this 不再指向 obj,而是指向了全局对象(在浏览器环境中通常是 window 对象),因此 this.name 是 undefined。
4.异步:
console.log('Start');setTimeout(function() {console.log('Inside timeout');}, 2000);console.log('End');
这个例子展示了异步代码的执行顺序。setTimeout 函数会在 2000 毫秒后将回调函数放入事件队列中,而不会阻塞后续代码的执行,因此会先输出 "Start" 和 "End",然后才会输出 "Inside timeout"。
在面试中,展示这些代码示例并解释它们的执行结果,可以帮助面试官了解你对闭包、原型链、this 指向和异步编程的理解程度。
相关文章:
复习面经哦
1.函数可以变量提升 JavaScript 中的函数存在变量提升的概念,这意味着在执行代码之前,函数声明会被提升到其作用域的顶部。这使得你可以在函数声明之前调用函数。然而,这种行为只适用于函数声明,而不是函数表达式。 下面是一些关…...
c++ STL系列——(二)vector
引言 在现代C编程中,std::vector是最常用的动态数组实现之一,它是C标准模板库(STL)的一部分。vector提供了一种方式,以单一数据结构来存储元素集合,并且可以动态地调整大小以适应新元素。本文将深入探讨ve…...
STM32能够做到数据采集和发送同时进行吗?
STM32能够做到数据采集和发送同时进行吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「STM32的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&am…...
5.Swift常量
Swift 常量 在 Swift 中,除了可以声明变量(使用 var 关键字),还可以声明常量(使用 let 关键字)。常量在赋值后就不能再修改其值,适合用于存储不会改变的数据。以下是关于 Swift 常量的一些重要…...
Linux运行级别 | 管理Linux服务
Linux运行级别 级别: 0关机1单用户2多用户但是不运行nfs网路文件系统3默认的运行级别,给一个黑的屏幕,只能敲命令4未使用5默认的运行级别,图形界面6重启切换运行级别: init x管理Linux服务 systemctl命令…...
Nginx 配置 SSL证书
成功配置SSL证书后,您将能够通过HTTPS加密通道安全访问Nginx服务器。 一、准备材料 SSL证书绑定的域名已完成DNS解析,即您的域名与主机IP地址相互映射。您可以通过DNS验证证书工具,检测域名DNS解析是否生效。具体操作: 【1】登录…...
如何正确理解和获取S参数
S参数是网络参数,定义了反射波和入射波之间的关系,给定频率的S参数矩阵指定端口反射波b的矢量相对于端口入射波a的矢量,如下所示: bS∙a 在此基础上,如下图所示,为一个常见的双端口网络拓扑图:…...
Sping Cloud Hystrix 参数配置、简单使用、DashBoard
Sping Cloud Hystrix 文章目录 Sping Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数C…...
CSS太极动态图
CSS太极动态图 1. 案例效果 我们今天学习用HTML和CSS实现动态的太极,看一下效果。 2. 分析思路 太极图是由两个旋转的圆组成,一个是黑圆,一个是白圆。实现现原理是使用CSS的动画和渐变背景属性。 首先,为所有元素设置默认值为0…...
TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码
TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…...
基于tomcat运行jenkins常见的报错处理
目录 1.jenkins.util.SystemProperties$Listener错误 升级jdk11可能遇到的坑 2.java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration 3.There were errors checking the update sites: UnknownHostException:updates.jenkins.i…...
算法学习——LeetCode力扣二叉树篇1
算法学习——LeetCode力扣二叉树篇1 144. 二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 示例 1: 输入:root [1,null,2,3] 输出&a…...
二叉树的遍历及创建
typedef char T;struct TreeNode {T _data;TreeNode* left;TreeNode* right; }; 1、二叉树的遍历---DFS 3 5 6 …...
图形学:Transform矩阵(3维 2维) 平移,旋转,缩放
0. 简介 在图形学领域中,Transform矩阵(变换矩阵)是一种表示图形对象在二维或三维空间中的位置、方向和大小变化的数学工具。它们用于执行各种图形变换,如平移、旋转、缩放。Transform矩阵通常表示为一个二维或三维矩阵ÿ…...
Docker学习历程
Docker学习历程 Q1、docker还没启动Q2、Docker容器名称冲突的问题Q3:启动minio时发现,容器已经再重启Q4:容器被占用的情况Q5:查看日志 Q1、docker还没启动 docker run --env MODEstandalone --name nacos --restartalways -d -p …...
Android:Volley框架使用
3.15 Volley框架使用 Volley框架主要作为网络请求,图片加载工具。当应用数据量小、网络请求频繁,可以使用Volley框架。 框架Github地址:https://github.com/google/volley Volley框架的简单使用,创建项目Pro_VolleyDemo。将Github上下载Volley框架源代码,volley-master.zi…...
前端修炼手册(uniapp的api篇)
一、页面相关API uni.navigateTo 该API用于跳转到应用内的某个页面,可以传递参数。 uni.navigateTo({url: /pages/detail/detail?id1 })uni.redirectTo 该API用于关闭当前页面并跳转到应用内的某个页面,可以传递参数。 uni.redirectTo({url: /pages/…...
JAVA面试题16
什么是Java中的反射机制?它的用途是什么? 答案:Java的反射机制是指在运行时,通过获取类的信息来操作类的属性、方法和构造函数等。它可以用来创建对象、调用方法,以及实现动态代理等功能。 什么是Java中的泛型&#x…...
P1044 [NOIP2003 普及组] 栈题解
题目 有一个单端封闭的管子,将N(1<N<18)个不同的小球按顺序放入管子的一端。在将小球放入管子的过程中也可以将管子最顶上的一个或者多个小球倒出来。请问:倒出来的方法总数有多少种? 输入输出格式 输入格式 输入文件只含一个整数n…...
【DSP】数字信号处理发展里程碑(AI【文心一言】 辅助生成)
在远离尘嚣的学术殿堂中,数字信号处理(DSP)这一学科犹如一颗璀璨的明珠,其发展历程充满了传奇色彩。下面,就让我们一起穿越时空,回到那些激动人心的时刻,见证数字信号处理从无到有、从弱到强的壮…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
