撩课-Web大前端每天5道面试题-Day8
程序员文章站
2023-03-31 16:16:52
1. 说说你对作用域链的理解? 2. 请说说JavaScript原型,原型链 ? 3. 请解释什么是事件代理? 4. new操作符具体完成了哪几个操作? 5. 说几条写JavaScript的基本规范? 6. 如何判断一个对象是否为数组? 7. 冒泡排序? 8. 快速排序? ......
1. 说说你对作用域链的理解?
作用域链的作用是保证执行环境里 有权访问的变量和函数是有序的, 作用域链的变量只能向*问, 变量访问到window对象即被终止, 作用域链向下访问变量是不被允许的; 作用域就是变量与函数的可访问范围, 即作用域控制着变量与函数的可见性 和生命周期。
2. 请说说javascript原型,原型链 ?
原型: 当我们访问一个对象的属性时, 每个对象都会在其内部初始化一个属性, 就是prototype(原型); 原型链: 如果这个对象内部不存在这个属性, 那么他就会去prototype里找这个属性, 这个prototype又会有自己的prototype, 于是就这样一直找下去, 也就是我们平时所说的原型链; 两者关系: instance.constructor.prototype = instance.__proto__
3. 请解释什么是事件代理?
事件代理(event delegation), 又称之为事件委托。 是 javascript 中常用绑定事件 的常用技巧。 “事件代理”即是把原本需要绑定 的事件委托给父元素,让父元素 担当事件监听的角色。 事件代理的原理是dom元素的事件冒泡。 使用事件代理的好处是可以提高性能, 可以大量节省内存占用,减少事件注册, 比如在ul上代理所有li的click事件; 此外, 还可以实现动态新增子对象时无需 再次对其绑定事件。
4. new操作符具体完成了哪几个操作?
1) 创建一个空对象, 定义this 变量引用该对象, 同时还继承了该函数的原型; 2) 属性和方法被加入到 this 引用的对象中; 3) 新创建的对象由 this 所引用, 并且最后隐式的返回 this
5. 说几条写javascript的基本规范?
1) 不要在同一行声明多个变量; 2) 请使用===/!==来比较true/false或者数值; 3) 使用对象字面量替代new object这种形式; 4) 减少使用全局函数, 全局变量; 5) switch语句必须带有default分支; 6) if语句必须使用大括号; 7) for-in循环中的变量; 应该使用var关键字明确限定作用域; 从而避免作用域全局污染。
6. 如何判断一个对象是否为数组?
function isarray(arg) { if (typeof arg === 'object') { return object.prototype.tostring.call(arg) === '[object array]'; } return false; }
7. 冒泡排序?
思路: 每次比较相邻的两个数, 如果后一个比前一个小,换位置; var arr = [2, 0, 1, 9, 8, 7, 3]; function bubblesort(arr) { for (var i = 0; i < arr.length - 1; i++) { for(var j = 0; j < arr.length - 1; j++) { if(arr[j + 1] < arr[j]) { var temp; temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } console.log(bubblesort(arr));
8. 快速排序?
思路: 采用二分法,取出中间数, 数组每次和中间数比较, 小的放到左边,大的放到右边; var arr = [2, 0, 1, 9, 8, 7, 3]; function quicksort(arr) { if(arr.length == 0) { return []; // 返回空数组 } var cindex = math.floor(arr.length / 2); var c = arr.splice(cindex, 1); var l = []; var r = []; for (var i = 0; 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));
上一篇: 水龙头:没想到吧!
下一篇: 江户川乱步:日本侦探推理小说之父