zoukankan      html  css  js  c++  java
  • Web大前端面试题-Day8

    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 - i - 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));

    function bubbleSort(arr) {
        var i = arr.length, j;
        var tempExchangVal;
        while (i > 0) {
            for (j = 0; j < i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    tempExchangVal = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tempExchangVal;
                }
            }
            i--;
        }
        return arr;
    }
     
    var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
    var arrSorted = bubbleSort(arr);
    console.log(arrSorted);
    alert(arrSorted);
    控制台将输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    并且弹窗;
     

    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));
     
     
     
  • 相关阅读:
    js 工厂模式、简单模式、抽象模式
    Angular 框架介绍
    Node.js从入门到实战ECMAScript6一页纸总结(很大的一页纸)
    ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况
    JSONP 教程
    jQuery ajax() 方法
    AJAX异步的 JavaScript
    自动化构建工具--gulp的初识和使用
    front-end 前端发展学习路线参考图
    Webpack 常用命令总结以及常用打包压缩方法
  • 原文地址:https://www.cnblogs.com/qingchunshiguang/p/10413802.html
Copyright © 2011-2022 走看看