gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
阅读:3769回复:1

前端面试常见编程题

楼主#
更多 发布于:2022-06-17 16:45
5、对闭包的理解,实现一个暴露内部变量,而且外部可以访问修改的函数
闭包的作用:
匿名自执行函数、缓存、实现封装(主要作用)、实现面向对象中的对象
var person = function(){    
    //变量作用域为函数内部,外部无法访问    
    var name = "default";      
    return {    
       getName : function(){    
           return name;    
       },    
       setName : function(newName){    
           name = newName;    
       }    
    }    
}();    

print(person.name);//直接访问,结果为undefined    
print(person.getName());    
person.setName("a");    
print(person.getName());

  
//得到结果如下:  
undefined  
default  
a



6、基本的数据类型
5个简单数据类型(基本数据类型)+ 1个复杂数据类型
undefiend, number string null boolean + object
ES6 新增Symbol


7、基本的两列自适应布局
左定右适应:

#div1{
    width: 100px;
    display: inline-block;
    background-color: black;
}
#div2{
    display: inline-block;
    position: absolute;
    left: 100px;
    right: 0px;
    background-color: red;
}




14、手写一个递归函数


function fact(num) {

   if (num <= 1) {

       return 1;            

   } else {

       return num * fact(num - 1);            

   }

}
     以下代码可导致出错:

var anotherFact = fact;
 fact = null;
 alert(antherFact(4)); //出错


由于fact已经不是函数了,所以出错。
用arguments.callee可解决问题,这是一个指向正在执行的函数的指针,arguments.callee返回正在被执行的对现象。
新的函数为:



function fact(num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * arguments.callee(num - 1); //此处更改了。
            }
}
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //结果为24.


21、使用css实现一个三角形 利用border去画~ 先看一下border的布局,如图:

所以三角形: 1.设置宽度、高度为0

2.不设置border-top

3.设置左右border颜色为transparent–透明
gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
沙发#
发布于:2022-06-17 17:01
23、手写一个类的继承,并解释一下
继承的形式有很多中,js高程里面归纳了其中,我简单说一下前三种。

1.原型继承
function Parent(){
this.name = “parent”;
}
Parent.prototype.getName = function(){
return this.name;
}

function Child(){
this.name = “child”;
}

//继承parent
Child.prototype = new Parent();



2.构造函数继承

function Animal(name){
    this.name = name;
    this.eat = function(){
        consoel.log(this.name + "吃饭");
    }
}
var cat = new Animal("maomi");
cat.name;
cat.eat();





24、解释一下call函数和apply函数的作用,以及用法

改变this的指向。 this的指向问题,在你不知道的js这本书中(神书)做了四点归纳: 1.默认绑定 (指 直接调用 foo(), this指向window) 2.隐式绑定(obj.foo(), this指向obj 这里会出现很多坑,下面的问题应该会有解答) 3.显示绑定(利用call、apply、bind改变this) 4.new(var cat = new Animal() , this指向cat对象)



40、手写归并排序

<1>.长度为n(n>1),把该输入序列分成两个长度为n/2的子序列; <2>.对这两个子序列分别采用归并排序,直到长度n小于2; <3>.将两个排序好的子序列合并成一个最终的排序序列。



function mergeSort(arr) {
    var len = arr.length;
    if(len < 2) {
        return arr;
    } else {
        middle = Math.floor(len / 2);
        var left = arr.slice(0, middle);
        var right = arr.splice(middle);
        return merge(mergeSort(left), mergeSort(right));
    }

}

function merge(left, right) {
    var result = [];
    while(left.length && right.length) {
        left[0] > right[0] ? result.push(right.shift()): result.push(left.shift());
    }


    if(left.length) {
        result = result.concat(left);
    }


    if(right.length) {
        result = result.concat(right);
    }


    return result;
}
游客


返回顶部