复习面经哦
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)这一学科犹如一颗璀璨的明珠,其发展历程充满了传奇色彩。下面,就让我们一起穿越时空,回到那些激动人心的时刻,见证数字信号处理从无到有、从弱到强的壮…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...