【前端面试3+1】01闭包、跨域、路由模式

news2024/11/17 21:38:17

一、对闭包的理解

定义

闭包是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。

特点:

闭包可以访问外部函数的变量,即使外部函数已经执行完毕。闭包可以保持外部函数的作用域不被销毁,从而延长变量的生命周期。

 应用:

闭包在 JavaScript 中被广泛应用,例如用于模块化开发、事件处理、异步编程等场景。闭包可以帮助我们隐藏变量,保护数据,以及实现高阶函数等功能。

作用:

  1. 封装变量:闭包可以帮助我们封装变量,避免全局变量污染。
  2. 保持作用域:闭包可以保持外部函数的作用域,延长变量的生命周期。
  3. 实现模块化:通过闭包可以实现模块化开发,将代码组织成独立的模块。
  4. 实现高阶函数:闭包可以作为参数传递给其他函数,实现高阶函数的功能。
  5. 实现私有变量:通过闭包可以实现私有变量和方法,保护数据安全。

优点:

  1. 封装性:闭包可以帮助我们封装变量和实现数据隐藏,提高代码的安全性和可维护性。
  2. 灵活性:闭包可以让函数拥有记忆功能,保持状态,实现更灵活的编程方式。
  3. 模块化:闭包可以帮助我们实现模块化开发,将代码组织成独立的模块,提高代码的可复用性。

缺点:

  1. 内存泄漏:如果闭包中引用了大量的外部变量,可能导致内存泄漏问题,需要注意内存管理。
  2. 性能问题:闭包会增加函数的作用域链长度,可能影响函数的执行效率,需要谨慎使用。
  3. 理解难度:闭包的概念相对抽象,可能增加代码的理解难度,需要深入理解才能正确应用。
function outerFunction() {
  let outerVar = 'I am outer';
  
  function innerFunction() {
    console.log(outerVar);
  }
  
  return innerFunction;
}

let closure = outerFunction();
closure(); // 输出 'I am outer'
```

在这个例子中,`innerFunction` 是一个闭包,可以访问 `outerFunction` 中定义的 `outerVar` 变量。

二、跨域的理解

定义:

       跨域是指在浏览器中,当前页面的域名、协议、端口和请求的目标资源的域名、协议、端口不一致时,浏览器会限制页面对资源的访问,这就是跨域。跨域是浏览器出于安全考虑而设置的限制,用于防止恶意网站获取用户的隐私信息。

如何解决跨域问题?


1. JSONP:通过动态创建 `<script>` 标签,利用 `<script>` 标签的跨域特性来获取数据。
2. CORS:跨域资源共享(Cross-Origin Resource Sharing),在服务端设置响应头,允许跨域请求。
3. 代理:通过服务器端转发请求,实现跨域访问

### 代理的原理:


代理是通过服务器端转发请求的方式解决跨域问题

具体原理如下:
1. 前端发送请求:前端将请求发送给自己的服务器,由自己的服务器代为转发。
2. 服务器接收请求:服务器接收到请求后,再向目标服务器发送请求。
3. 目标服务器响应:目标服务器响应结果后,服务器再将结果返回给前端。

        通过代理,前端请求的是自己的服务器,避免了跨域问题,而服务器之间的请求不受同源策略限制,可以正常通信。代理可以在服务器端对请求进行处理,如添加请求头、修改请求参数等,更加灵活地控制请求和响应。

总的来说,代理是一种常见的解决跨域问题的方法,通过服务器端转发请求实现前端与目标服务器之间的通信,避免浏览器的跨域限制。

三、路由模式有哪些?

  1. 哈希模式:使用 URL 中的 # 符号来标记路由,通过监听 hashchange 事件来实现路由的切换。例如:http://example.com/#/home。

  2. History 模式:利用 HTML5 的 History API,可以在不刷新页面的情况下改变 URL,实现路由的切换。例如:http://example.com/home。

四、 【算法】两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

1.解法一

暴力法:

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    for (int i = 0; i < numsSize; ++i) {
        for (int j = i + 1; j < numsSize; ++j) {
            if (nums[i] + nums[j] == target) {
                int* ret = malloc(sizeof(int) * 2);
                ret[0] = i, ret[1] = j;
                *returnSize = 2;
                return ret;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

作者:力扣官方题解

        代码中通过两层循环遍历整数数组nums,找到两个数的索引ij,使得这两个数的和等于目标值target。如果找到了这样的两个数,则动态分配一个包含两个整数的数组ret,将这两个数的索引存入数组中,并将结果数组的大小设为2,最后返回这个数组ret。如果未找到满足条件的两个数,则将结果数组的大小设为0,并返回NULL

2.解法二

使用哈希表

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

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

相关文章

游戏开发笔记:游戏海外版本时区问题(解释时区问题,分解为js写法和lua写法来分析记录,整理出对应语言的相关函数方法。)

对于海外游戏而言,与时间相关的功能,都不能忽略时区的计算。根据 ‘ 服务端资源是有限的,客户端资源是无穷无尽的 ’的定义来说,基本上时区包括时间的计算都是由客户端来进行计算,今天内容也是围绕客户端来展开。 时区算法常见的时间描述时区需要计算的点在lua语言中的写…

我与电源2 我要升压

上一篇文章中讲到,我从LM7805 开始 接触电子设计,后来,随着对更高耐压,更高电流及功率的需求,不断的接触更先进的,效率更高,功率密度更大的电源方案,从线性稳压器到 DCDC 的Buck 电路。从最初 DCDC的异步开关模式转到使用同步开关模式。 这里要对线性稳压器再说一点。…

library cache lock模拟和处理

会话一&#xff1a; create or replace procedure dummy is begin null; end; /begin Dummy; Dbms_lock.sleep(1000); End; /会话二&#xff1a; SQL> alter procedure dummy compile; 卡住 会话三&#xff1a; SQL> alter procedure dummy compile; 卡住 处理过程…

计算机基础系列 —— CPU

“Make everything as simple as possible, but no simpler.” – Albert Einstein 文中提到的所有实现都可以参考&#xff1a;nand2tetris_sol&#xff0c;但是最好还是自己学习课程实现一遍&#xff0c;理解更深刻。 之前的文章里我们介绍了 Register、PC、RAM 和 ALU&#…

【蓝桥杯】tarjan算法

一.概述 Tarjan 算法是基于DFS的算法&#xff0c;用于求解图的连通性问题。 Tarjan 算法可以在线性时间内求出&#xff1a; 无向图&#xff1a; 割点与桥双连通分量 有向图&#xff1a; 强连通分量必经点与必经边 1.割点&#xff1a; 若从图中删除节点 x 以及所有与 x 关联的…

【学习】软件科技成果鉴定测试有何作用

软件科技成果鉴定测试是针对软件进行项目申报、科技成果鉴定等相关目的进行的测试。软件测试报告可作为项目申报、科技成果鉴定等工作的依据之一。软件类科技成果鉴定测试从软件文档、功能性、使用技术等方面对软件系统进行符合性测试。其测试结果证明软件的质量是否符合技术合…

机器学习笔记(2)—单变量线性回归

单变量线性回归 单变量线性回归(Linear Regression with One Variable)1.1 模型表示1.2 代价函数1.3 代价函数的直观理解1.4 梯度下降1.5 梯度下降的直观理解1.6 梯度下降的线性回归 单变量线性回归(Linear Regression with One Variable) ps:...今天很倒霉 一名小女孩悄悄地碎…

PTA金字塔游戏

幼儿园里真热闹&#xff0c;老师带着孩子们做一个名叫金字塔的游戏&#xff0c;游戏规则如下&#xff1a; 首先&#xff0c;老师把孩子们按身高从高到矮排列&#xff0c;选出最高的做队长&#xff0c;当金字塔的塔顶&#xff0c;之后在其余小朋友里选出两个最高的&#xff0c;…

JUC:打断正常线程、睡眠线程、park线程的interrupt状态、二阶段终止模式

文章目录 打断标记两阶段终止注意打断park线程 打断标记 睡眠中的线程被打断时&#xff0c;会抛出异常&#xff0c;把打断标记置为false&#xff0c;而不是变为true&#xff0c;wait和join也是。 打断 sleep&#xff0c;wait&#xff0c;join 的线程 这几个方法都会让线程进入…

如何使用Docker安装部署Cronsun?

前言 Cronsun是一款开源的分布式任务调度系统&#xff0c;主要用于在*nix服务器集群中管理和调度周期性任务。相比于传统的Linux crontab 工具&#xff0c;Cronsun提供了一个集中化的Web界面&#xff0c;使得在多台服务器上的定时任务更容易管理和监控&#xff0c;并且具备任务…

大话设计模式——8.原型模式(Prototype Pattern)

1.介绍 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。属于创建型模式。 UML图&#xff1a; 1&#xff09;浅拷贝&#xff1a; 指创建一个新的对象&#xff0c;然后将原始对象的字段值复制到新对象中。如果字段是基本类型&#xff0c;直接复制…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

Java毕业设计-基于springboot开发的校园志愿者管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能3、志愿者功能 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的校园志愿者管理系统…

“AI程序员”Devin大杀四方后,人类程序员开始了他们的反击......

“首个AI程序员”Devin发布后&#xff0c;大有要替代人类程序员的意味。 在当时发布之初&#xff0c;Devin展示了AI自主处理各种程序任务的案例。其中Devin生成“生命游戏”的演示是最让我震惊的。 所谓“生命游戏”&#xff0c;是由英国数学家约翰何顿康威&#xff08;John …

CPU设计实战-外设接口介绍与测试

GPIO 内置寄存器&#xff0c;BASE地址由外设所在设备接口处决定&#xff0c;这样就可以确定每个寄存器的地址&#xff1b; 要使用输出先要使能&#xff0c;要用中断也先要使能&#xff1b; 测试实验-数码管驱动 数码管与GPIO的输出接口连接 编写汇编语言 1.使能输出端口 2…

游戏 AI 反作弊|基于时序行为数据的自瞄外挂检测方案,附方案详情!

游戏AI反作弊&#xff0c;上次跟大家分享了基于时序行为数据的透视外挂检测方案&#xff0c;本次跟大家分享 基于时序行为数据的自瞄外挂检测方案&#xff0c;大家记得点赞收藏&#xff01; 游戏 AI 反作弊|内附解决方案详情&#xff01;-CSDN博客 基于时序行为数据的自瞄外挂检…

【正点原子Linux连载】第二十二章 Linux INPUT子系统实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第二十…

DNS协议 是什么?说说DNS 完整的查询过程?

一、是什么 DNS&#xff08;Domain Names System&#xff09;&#xff0c;域名系统&#xff0c;是互联网一项服务&#xff0c;是进行域名和与之相对应的 IP 地址进行转换的服务器 简单来讲&#xff0c;DNS相当于一个翻译官&#xff0c;负责将域名翻译成ip地址 IP 地址&#…

【数据分享】1929-2023年全球站点的逐日平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

笔记本作为其他主机显示屏(HDMI采集器)

前言&#xff1a; 我打算打笔记本作为显示屏来用&#xff0c;连上工控机&#xff0c;这不是贼方便吗 操作&#xff1a; 一、必需品 HDMI采集器一个 可以去绿联买一个&#xff0c;便宜的就行&#xff0c;我的大概就长这样 win10下载 PotPlayer 软件 下载链接&#xff1a;h…