复习面经哦
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)这一学科犹如一颗璀璨的明珠,其发展历程充满了传奇色彩。下面,就让我们一起穿越时空,回到那些激动人心的时刻,见证数字信号处理从无到有、从弱到强的壮…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
