撩课-Web大前端每天5道面试题-Day8
1. 说说你对作用域链的理解?
作用域链的作用是保证执行环境里
有权访问的变量和函数是有序的,
作用域链的变量只能向上访问,
变量访问到window对象即被终止,
作用域链向下访问变量是不被允许的; 作用域就是变量与函数的可访问范围,
即作用域控制着变量与函数的可见性
和生命周期。
2. 请说说JavaScript原型,原型链 ?
原型:
当我们访问一个对象的属性时,
每个对象都会在其内部初始化一个属性,
就是prototype(原型); 原型链:
如果这个对象内部不存在这个属性,
那么他就会去prototype里找这个属性,
这个prototype又会有自己的prototype,
于是就这样一直找下去,
也就是我们平时所说的原型链; 两者关系:
instance.constructor.prototype = instance.__proto__
3. 请解释什么是事件代理?
事件代理(Event Delegation),
又称之为事件委托。
是 JavaScript 中常用绑定事件
的常用技巧。 “事件代理”即是把原本需要绑定
的事件委托给父元素,让父元素
担当事件监听的角色。 事件代理的原理是DOM元素的事件冒泡。
使用事件代理的好处是可以提高性能,
可以大量节省内存占用,减少事件注册,
比如在ul上代理所有li的click事件; 此外, 还可以实现动态新增子对象时无需
再次对其绑定事件。
4. new操作符具体完成了哪几个操作?
) 创建一个空对象, 定义this 变量引用该对象,
同时还继承了该函数的原型; ) 属性和方法被加入到 this 引用的对象中; ) 新创建的对象由 this 所引用,
并且最后隐式的返回 this
5. 说几条写JavaScript的基本规范?
) 不要在同一行声明多个变量;
) 请使用===/!==来比较true/false或者数值;
) 使用对象字面量替代new Object这种形式;
) 减少使用全局函数, 全局变量;
) switch语句必须带有default分支;
) if语句必须使用大括号;
) for-in循环中的变量;
应该使用var关键字明确限定作用域;
从而避免作用域全局污染。
6. 如何判断一个对象是否为数组?
function isArray(arg) {
if (typeof arg === 'object') {
return
Object.prototype.toString.call(arg)
=== '[object Array]';
}
return false;
}
7. 冒泡排序?
思路:
每次比较相邻的两个数,
如果后一个比前一个小,换位置; var arr = [, , , , , , ];
function bubbleSort(arr) {
for (var i = ; i < arr.length - ; i++) {
for(var j = ; j < arr.length - ; j++) {
if(arr[j + ] < arr[j]) {
var temp;
temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
8. 快速排序?
思路: 采用二分法,取出中间数,
数组每次和中间数比较,
小的放到左边,大的放到右边; var arr = [, , , , , , ]; function quickSort(arr) {
if(arr.length == ) {
return []; // 返回空数组
}
var cIndex = Math.floor(arr.length / );
var c = arr.splice(cIndex, );
var l = [];
var r = []; for (var i = ; i < arr.length; i++) {
if(arr[i] < c) {
l.push(arr[i]);
} else {
r.push(arr[i]);
}
}
return quickSort(l).concat(c, quickSort(r));
} console.log(quickSort(arr));
撩课-Web大前端每天5道面试题-Day8的更多相关文章
- 撩课-Web大前端每天5道面试题-Day10
1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...
- 撩课-Web大前端每天5道面试题-Day4
1. 如何实现瀑布流? 瀑布流布局的原理: ) 瀑布流布局要求要进行布置的元素等宽, 然后计算元素的宽度, 与浏览器宽度之比,得到需要布置的列数; ) 创建一个数组,长度为列数, 里面的值为已布置元素 ...
- 撩课-Web大前端每天5道面试题-Day1
1. var的变量提升的底层原理是什么? JS引擎的工作方式是: 1) 先解析代码,获取所有被声明的变量: 2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到 ...
- 撩课-Web大前端每天5道面试题-Day11
1. 如何手写一个JQ插件? 方式一: $.extend(src) 该方法就是将src合并到JQ的全局对象中去: $.extend({ log: ()=>{alert('撩课itLike');} ...
- 撩课-Web大前端每天5道面试题-Day31
1.web storage和cookie的区别? Web Storage的概念和cookie相似, 区别是它是为了更大容量存储设计的. Cookie的大小是受限的, 并且每次你请求一个新的页面的时候C ...
- 撩课-Web大前端每天5道面试题-Day25
1.web前端开发,如何提高页面性能优化? 内容方面: .减少 HTTP 请求 (Make Fewer HTTP Requests) .减少 DOM 元素数量 (Reduce the Number o ...
- 撩课-Web大前端每天5道面试题-Day7
1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...
- 撩课-Web大前端每天5道面试题-Day30
1.什么叫优雅降级和渐进增强? 优雅降级: Web站点在所有新式浏览器中都能正常工作, 如果用户使用的是老式浏览器, 则代码会针对旧版本的IE进行降级处理了, 使之在旧式浏览器上以某种形式降级体验却不 ...
- 撩课-Web大前端每天5道面试题-Day23
1.为什么用Nodejs,它有哪些优缺点? 优点: 事件驱动,通过闭包很容易实现客户端的生命活期. 不用担心多线程,锁,并行计算的问题 V8引擎速度非常快 对于游戏来说,写一遍游戏逻辑代码,前端后端通 ...
随机推荐
- 【12c OCP】CUUG OCP认证071考试原题解析(34)
34.choose two View the Exhibit and examine the structure of the PRODUCT_INFORMATION and INVENTORIES ...
- CF77E Martian Food(圆的反演or 笛卡尔定理+韦达定理)
题面 传送门 这题有两种方法(然而两种我都想不到) 方法一 前置芝士 笛卡尔定理 我们定义一个圆的曲率为\(k=\pm {1\over r}\),其中\(r\)是圆的半径 若在平面上有两两相切,且六个 ...
- NEST - How can i do multiple nested aggregation?
question: How can I do multiple nested aggregation? I have tried something like this: Aggregations(x ...
- canvas绘制简单的霓虹灯效果
canvas简单动画分为三个步骤: 1.清除画布区域的内容: 2.重绘: 3.执行requestAnimationFrame(); 这个霓虹灯效果的demo,我没有用requestAnimationF ...
- AngularJS源码解析3:RootScope的创建过程
RootScopeProvider简介 RootScopeProvider是angularjs里面比较活跃的一个provider.它主要用来生成实例rootScope,它代表angularjs应用的根 ...
- verify验证插件的详解
使用此验证插件,我们只需要新建一个实例对象,同时传入一个json对象就行了,这里我们只传入了两个属性:checkItem和callback.下面的代码解析,我们就按照这个例子来. var verify ...
- JavaScript变量那些事
引言 JavaScript的变量本质是松散类型的,也就是说其变量就是用于保存特定值的一个名字,变量的值和数据类型可以在脚本执行的生命周期中发生变化.这是一个很有趣很强大的特性,但是也是一个极容易出错误 ...
- GeneXus学习笔记——入门篇
使用GeneXus做开发做了有一段时间了 却发现一个问题(O_O)?就是除了相关的Wiki外 网上其他地方的相关资料都很少 于是乎我就想在这记录一些东西 来帮助以后会用到的人(°ー°") 那 ...
- Docker for Windows 启动失败,提示Kubernetes证书无效
起因 部署服务器到一台很久未更新的系统(windows 10),安装docker后,恰好系统自动更新,重启后docker不能启动,提示Kubernetes证书无效(未截到图,抱歉) 排查 因为没有开启 ...
- (转).NET技术大系概览 (迄今为止最全的.NET技术栈)
前言 .Net推出13年了,Visual Studio 2015 / .NET Framework 4.6昨天也发布了. 从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本 ...