整理几道面试题

101 阅读1分钟

1.JSX语法,与react有什么关系?

2.render方法为什么不能放两个同级的兄弟元素,只能放一个根元素?

3.react与Vue相比,有什么优缺点?

4.react有几个生命周期?

5.虚拟DOM是存在什么地方的?

6.什么是高阶组件?

7.在地址栏访问地址,这个过程发生了什么?

8.CSS有哪几种定位?有什么区别,absolute可以相对于absolute吗?哪些是脱离了正常的文档流?

9.说一下CSS的盒模型?

10.常用的跨域方法?

11.get和post的区别

12.js继承

13.js实现url解析

14.call()和apply()

15.代码如下:

请定义这样一个函数 function repeat (func, times, wait) { } 这个函数能返回一个新函数,比如这样用 var repeatedFun = repeat(alert, 10, 5000) 调用这个 repeatedFun ("hellworld") 会alert十次 helloworld, 每次间隔5秒

16.代码如下:

写一个函数stringconcat, 要求能 var result1 = stringconcat("a", "b") result1 = "a+b" var stringconcatWithPrefix = stringconcat.prefix("hellworld"); var result2 = stringconcatWithPrefix("a", "b") result2 = "hellworld+a+b"

解答15,16题

代码如下:

第一题:

/*
 * 第一题
 * @param func
 * @param times
 * @param wait
 * @returns {repeatImpl}
 */
function repeat (func, times, wait) {
    //不用匿名函数是为了方便调试
    function repeatImpl(){
        var handle,
            _arguments = arguments,
            i = 0;
        handle = setInterval(function(){
            i = i + 1;
            //到达指定次数取消定时器
            if(i === times){
                clearInterval(handle);
                return;
            }
            func.apply(null, _arguments);
        },wait);
    }
    return repeatImpl;
}

// 测试用例
var repeatFun = repeat(alert, 4, 3000);
repeatFun("hellworld");

第二题:

/*
 * 第二题
 * @returns {string}
 */
function stringconcat(){
    var result = [];
    stringconcat.merge.call(null, result, arguments);
    return result.join("+");
}

stringconcat.prefix = function(){
    var _arguments = [],
        _this = this;
    _this.merge.call(null, _arguments, arguments);
    return function(){
        var _args = _arguments.slice(0);
        _this.merge.call(null, _args, arguments);
        return _this.apply(null, _args);
    };
};
stringconcat.merge = function(array, arrayLike){
    var i = 0;
    for(i = 0; i < arrayLike.length; i++){
        array.push(arrayLike[i]);
    }
}
//测试用例
var result1 = stringconcat("a", "b"); //result1 = "a+b"
var result3 = stringconcat("c", "d"); //result1 = "a+b"
var stringconcatWithPrefix = stringconcat.prefix("hellworld");
var stringconcatWithPrefix1 = stringconcat.prefix("hellworld1");
var result2 = stringconcatWithPrefix("a", "b"); //result2 = "hellworld+a+b"
var result4 = stringconcatWithPrefix1("c", "d"); //result2 = "hellworld+a+b"
alert(result1);
alert(result2);
alert(result3);
alert(result4);