⭐️ From DamomHd
damomhd / interview-question Goto Github PK
View Code? Open in Web Editor NEW整理各大厂面试题
整理各大厂面试题
⭐️ From DamomHd
函数的柯里化,是 Javascript 中函数式编程的一个重要概念。它返回的,是一个函数的函数。其实现方式,需要依赖参数以及递归,通过拆分参数的方式,来调用一个多参数的函数方法,以达到减少代码冗余,增加可读性的目的。
JS任务分类分为 同步任务和异步任务
虽然JS是单线程的,但是浏览器内核却是多线程的,在浏览器内核中不同的异步操作由不同的浏览器内核模块调度执行,异步任务操作会将相关回调添加到任务队列中
然后不同的异步操作添加到任务队列的时机也是不同的,比如onclick、setTimeout、ajax处理的方式都不相同
这些异步操作是由浏览器内核来执行的,浏览器内核上包含3种webAPI,分别是DOM Binding(Dom绑定)、network(网络请求)、timer(定时器)模块
按这种分类方式,JS的执行机制是:
以上三步循环执行,这就是事件循环(Event loop),它是连接任务队列和控制调用栈的
在forEach中用return不会返回,函数会继续执行。
多维数组=》一维数组
let arr = [1, [2, [3, [4, [5, ] , 6], 7], 8]]
let str = JSON.stringify(arr)
三者都是前端构建工具,grunt和gulp在早期比较流行,现在webpack相对来说比较主流,不过一些轻量化的任务还是会用gulp来处理,比如单独打包CSS文件等。
grunt和gulp是基于任务和流(Task、Stream)的。类似jQuery,找到一个(或一类)文件,对其做一系列链式操作,更新流上的数据, 整条链式操作构成了一个任务,多个任务就构成了整个web的构建流程。
webpack是基于入口的。webpack会自动地递归解析入口所需要加载的所有资源文件,然后用不同的Loader来处理不同的文件,用Plugin来扩展webpack功能
一道阿里面试题 尝试输出结果
var length = 100
function f1 (){
console.log(this.length)
}
var obj = {
length:10,
f2:function(f1){
f1();
arguments[0]()
}
}
obj.f2(f1,1)
var arr = [1,2,3,4,5,6,7]
function output(){
}
output()
//[[1,2],[3,4],[5,6],[7]]
//[[1,2,3],[4,5,6],[7]]
因为arguments本身并不能调用数组方法,它是一个另外一种对象类型,只不过属性从0开始排,依次为0,1,2...最后还有callee和length属性。我们也把这样的对象称为类数组。
常见的类数组还有:
for(var i = 1; i <= 5; i ++){
setTimeout(function timer(){
console.log(i)
}, 0)
}
Node v10及以前:
Node v10以后:
和浏览器的行为统一了
<div class="container">
<div class="content"></div>
</div>
.container{
width:500px;
height:500px;
background-color:#999;
}
.content{
width:200px;
height:200px;
background-color:#333;
}
`
class PrimitiveNumber {
static Symbol.hasInstance{
return typeof num === 'number'
}
}
console.log(111 instanceof PrimitiveNumber) //true
`
Loader像一个"翻译官"把读到的源文件内容转义成新的文件内容,并且每个Loader通过链式操作,将源文件一步步翻译成想要的样子。
编写Loader时要遵循单一原则,每个Loader只做一种"转义"工作。 每个Loader的拿到的是源文件内容(source),可以通过返回值的方式将处理后的内容输出,也可以调用this.callback()方法,将内容返回给webpack。 还可以通过 this.async()生成一个callback函数,再用这个callback将处理后的内容输出出去。 此外webpack还为开发者准备了开发loader的工具函数集——loader-utils。
相对于Loader而言,Plugin的编写就灵活了许多。 webpack在运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。
BFC:BFC 全称为块级格式化上下文 (Block Formatting Context) 。BFC是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位以及与其他元素的关系和相互作用,当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。比如浮动元素会形成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。这里有点类似一个BFC就是一个独立的行政单位的意思。可以说BFC就是一个作用范围,把它理解成是一个独立的容器,并且这个容器里box的布局与这个容器外的box毫不相干。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.