avatar
文章
297
标签
31
分类
11

首页
文章
标签
娱乐
  • 图库
  • Music
  • Movie
  • 简历
联系我
About
前端日记
搜索
首页
文章
标签
娱乐
  • 图库
  • Music
  • Movie
  • 简历
联系我
About

前端日记

面试官:你是怎么理解ES6中Module的?使用场景?
发表于2023-01-01|面试
面试官:你是怎么理解ES6中Module的?使用场景? 一、介绍模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口(即其他模块或程序调用该模块的方式,包括有输入输出参数、引用的全局变量)和模块的功能 内部特征是指模块的内部环境具有的特点(即该模块的局部数据和程序代码) 为什么需要模块化 代码抽象 代码封装 代码复用 依赖管理 如果没有模块化,我们代码会怎样? 变量和方法不容易维护,容易污染全局作用域 加载资源的方式通过script标签从上到下。 依赖的环境主观逻辑偏重,代码较多就会比较复杂。 大型项目资源难以维护,特别是多人合作的情况下,资源的引入会让人奔溃 因此,需要一种将JavaScript程序模块化的机制,如 CommonJs (典型代表:node.js早期) AMD (典型代表:require.js) CMD (典型代表:sea.js) AMDAsynchronous ModuleDefinition(AMD),异步模块定义,采 ...
面试官:对象新增了哪些扩展?
发表于2023-01-01|面试
面试官:对象新增了哪些扩展? 一、属性的简写ES6中,当对象键名与对应值名相等的时候,可以进行简写 1234const baz = {foo:foo}// 等同于const baz = {foo} 方法也能够进行简写 12345678910111213const o = { method() { return "Hello!"; }};// 等同于const o = { method: function() { return "Hello!"; }} 在函数内作为返回值,也会变得方便很多 12345678function getPoint() { const x = 1; const y = 10; return {x, y};}getPoint()// {x:1, y:10} 注意:简写的对象方法不能用作构造函数,否则会报错 12345 ...
面试官:你是怎么理解ES6中 Promise的?使用场景?
发表于2023-01-01|面试
面试官:你是怎么理解ES6中 Promise的?使用场景? 一、介绍Promise ,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大 在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码 1234567doSomething(function(result) { doSomethingElse(result, function(newResult) { doThirdThing(newResult, function(finalResult) { console.log('得到最终结果: ' + finalResult); }, failureCallback); }, failureCallback);}, failureCallback); 阅读上面代码,是不是很难受,上述形成了经典的回调地狱 现在通过Promise的改写上面的代码 12345678910doSomething().then(function(result) ...
面试官:你是怎么理解ES6中Proxy的?使用场景?
发表于2023-01-01|面试
面试官:你是怎么理解ES6中Proxy的?使用场景? 一、介绍定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming) 元编程(Metaprogramming,又译超编程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作 一段代码来理解 1234567#!/bin/bash# metaprogramecho '#!/bin/bash' >programfor ((I=1; I<=1024; I++)) do echo "echo $I" >>programdonechmod +x program 这段程序每执行一次能帮我们生成一个名为program的文件,文件内容为1024行echo,如果我们手动来写1024行代码,效率显然低效 元编程优点:与手工编写全部代码相比,程序员可以获得更高的工作效率,或者给与程序更大的灵活度去处理新的情形而无需重新编 ...
面试官:你是怎么理解ES6新增Set、Map两种数据结构的?
发表于2023-01-01|面试
面试官:你是怎么理解ES6新增Set、Map两种数据结构的? 如果要用一句来描述,我们可以说 Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构 什么是集合?什么又是字典? 集合是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合 字典是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同 区别? 共同点:集合、字典都可以存储不重复的值 不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储 一、Set Set是es6新增的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值,我们一般称为集合 Set本身是一个构造函数,用来生成 Set 数据结构 1const s = new Set(); 增删改查Set的实例关于增删改查的方法: add() delete() has() clear() add()添加某个值,返回 Set 结构本身 当添加实例中已经存在的元素,set不会进行处理添加 1s.add(1).add(2).add(2); // 2只被添加了一次 delete()删除 ...
面试官:说说var、let、const之间的区别
发表于2023-01-01|面试
面试官:说说var、let、const之间的区别 一、var在ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量 注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象 12var a = 10;console.log(window.a) // 10 使用var声明的变量存在变量提升的情况 12console.log(a) // undefinedvar a = 20 在编译阶段,编译器会将其变成以下执行 123var aconsole.log(a)a = 20 使用var,我们能够对一个变量进行多次声明,后面声明的变量会覆盖前面的变量声明 123var a = 20 var a = 30console.log(a) // 30 在函数中使用使用var声明变量时候,该变量是局部的 123456var a = 20function change(){ var a = 30}change()console.log(a) // 20 而如果在函数内不使用var,该变量是全局的 123 ...
面试官:说说你对工厂模式的理解?应用场景?
发表于2023-01-01|面试
面试官:说说你对工厂模式的理解?应用场景? 一、是什么工厂模式是用来创建对象的一种最常用的设计模式,不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂 其就像工厂一样重复的产生类似的产品,工厂模式只需要我们传入正确的参数,就能生产类似的产品 举个例子: 编程中,在一个 A 类中通过 new 的方式实例化了类 B,那么 A 类和 B 类之间就存在关联(耦合) 后期因为需要修改了 B 类的代码和使用方式,比如构造函数中传入参数,那么 A 类也要跟着修改,一个类的依赖可能影响不大,但若有多个类依赖了 B 类,那么这个工作量将会相当的大,容易出现修改错误,也会产生很多的重复代码,这无疑是件非常痛苦的事; 这种情况下,就需要将创建实例的工作从调用方(A类)中分离,与调用方解耦,也就是使用工厂方法创建实例的工作封装起来(减少代码重复),由工厂管理对象的创建逻辑,调用方不需要知道具体的创建过程,只管使用,而降低调用者因为创建逻辑导致的错误; 二、实现工厂模式根据抽象程度的不同可以分为: 简单工厂模式(Simple Factory) 工厂方法模式(Fact ...
面试官:说说你对发布订阅、观察者模式的理解?区别?
发表于2023-01-01|面试
面试官:说说你对发布订阅、观察者模式的理解?区别? 一、观察者模式观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新 观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯 例如生活中,我们可以用报纸期刊的订阅来形象的说明,当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸 报社和订报纸的客户就形成了一对多的依赖关系 实现代码如下: 被观察者模式 123456789101112131415161718192021class Subject { constructor() { this.observerList = []; } addObserver(observer) { this.observerList.push(observer); } removeObserver(observer) { const index = this.obs ...
面试官:说说你对代理模式的理解?应用场景?
发表于2023-01-01|面试
面试官:说说你对代理模式的理解?应用场景? 一、是什么代理模式(Proxy Pattern)是为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要时,提供一个替身对象来控制这个对象的访问,客户实际上访问的是替身对象 在生活中,代理模式的场景是十分常见的,例如我们现在如果有租房、买房的需求,更多的是去找链家等房屋中介机构,而不是直接寻找想卖房或出租房的人谈。此时,链家起到的作用就是代理的作用 二、使用在ES6中,存在proxy构建函数能够让我们轻松使用代理模式: 1const proxy = new Proxy(target, handler); 关于Proxy的使用可以翻看以前的文章 而按照功能来划分,javascript代理模式常用的有: 缓存代理 虚拟代理 缓存代理缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前一致,则可以直接返回前面存储的运算结果 如实现一个求积乘的函数,如下: 12345678var muti = function () { con ...
面试官:说说你对单例模式的理解?如何实现?
发表于2023-01-01|面试
面试官:说说你对单例模式的理解?如何实现? 一、是什么 单例模式(Singleton Pattern):创建型模式,提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建 在应用程序运行期间,单例模式只会在全局作用域下创建一次实例对象,让所有需要调用的地方都共享这一单例对象,如下图所示: 从定义上来看,全局变量好像就是单例模式,但是一般情况我们不认为全局变量是一个单例模式,原因是: 全局命名污染 不易维护,容易被重写覆盖 二、实现在javascript中,实现一个单例模式可以用一个变量来标志当前的类已经创建过对象,如果下次获取当前类的实例时,直接返回之前创建的对象即可,如下: 1234567891011121314151617181920212223// 定义一个类function Singleton(name) { this.name = name; this.instance = null;}// 原型扩展类的一个方法getName()Singleton.prototyp ...
1…101112…30
avatar
YangTao
share & study
文章
297
标签
31
分类
11
Follow Me
公告
=>我的个人网站,分享前端技术及踩坑记录。如果喜欢,欢迎Star!
最新文章
GitHub2025-07-18
为什么前端打包出来的静态文件名字是一串 Hash 值 ?2024-11-28
Vue的不同风格写法,你知道么?2024-10-24
一文解读react-hook(useState、useReducer、useEffect、useCallback、useMemo、useRef、useContext...)2024-09-06
GPT4升级指南(2024年5月最新)2024-05-15
标签
面试JavaScript小程序CSSES6utils正则NodeJSExpressKoatestwindowyamlgithubvuewebpackmetacliajaxReact算法GPT设计模式GitHttpLinuxTypeScriptvue2Vuevue3proxy
网站资讯
文章数目 :
297
已运行时间 :
本站总字数 :
528.5k
最后更新时间 :
©2023 - 2025 By YangTao
鄂ICP备2021000562号
搜索
数据库加载中