字节面试题整理

1、用js实现判断一个变量是否为整数的函数

let a = 1.2;
function isInt(number) {
    b = Math.ceil(number);
    return number - b === 0 ? 'is' : 'no'
}
console.log(isInt(a))

2、继承

3、防抖节流

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    div {
        width: 200px;
        height: 230px;
        background-color: #aaeeea;
    }
</style>
<body>
<div></div>
<input type="text">
</body>
<script>
    function jieliu(fn, layout) {
        div = document.getElementsByTagName('div');
        m = true;
        div[0].addEventListener('click', function () {
            if (m == false) {
                return
            } ;
            m = false;
            setTimeout(function () {
                fn();
                m = true;
            }, layout)
        })
    };
    function aa() {
        console.log('aa')
    };

    jieliu(aa, 1000)

</script>
</html>
    function jieliu(fn, layout) {
        div = document.getElementsByTagName('div');

        div[0].addEventListener('click', function () {

           clearTimeout(fn.timer);
           fn.timer= setTimeout(function () {
                fn();
            }, layout)
        })
    };
    function aa() {
        console.log('aa')
    };

    jieliu(aa, 1000)

4、JS里有哪些数据类型,基本数据类型和引用数据类型有什么区别?

主要问了一下Symbol怎么使用

5、一次 new 操作到底发生了什么?(手写new)

// 在调用 new 的过程中会发生以下四件事
// 新生成一个对象
// 将构造函数的作用域赋值给新对象(即绑定新对象的 this)
// 执行构造函数中的代码(即为这个新对象添加属性)
// 返回新对象




// 实现一个new操作符
function myNew() {
    // 创建一个新对象obj
    let obj = new Object();
    // 取参数的第一项为构造函数fn,这里可以写(arguments,1)也可以直接(arguments),都是代表参数的第一项,取构造函数
    let fn = [].shift.call(arguments);

    // 将obj.__proto__连接到构造函数fn的原型
    obj.__proto__ = fn.prototype;
    // result接收构造函数执行后的返回结果
    let result = fn.apply(obj, arguments);
    // 如果构造函数返回一个对象,则将该对象返回,否则返回步骤1创建的对象
    return typeof result === 'object' ? result : obj;
}
//测试
function Person(name) {
    this.name = name;
}

var p2 = myNew(Person, "小明");
console.log(p2.name);


// 其实,对于创建一个对象来说,都是通过 new 产生的,字面量创建一个对象本质是通过 new Object(),而且更推荐这种方式创建对象。因为使用构造函数的方式创建对象需要通过作用域链一层层找到 Object。

6、作用域链

var a= function () { this.b =3; }
var c = new a();
a.protorype.b = 9;
var b = 7;
a();
// 问执行以下语句,会输出什么
console.log(b);
console.log(c.b); 

7、promise

使用 sleep 函数,实现隔一秒打印1,再隔2s打印2,再隔3s打印3

function sleep (timeout) {
    return new Promise((resolve) => {
        setTimeout(resolve, timeout)
    });
}

function main() {
}

8、闭包和this指向

inner = 'window';
function say() {
    console.log(inner);
    console.log(this.inner);
}
var obj1 = (function() {
    var inner = '1-1';
    return {
        inner: '1-2',
        say: function() {
            console.log(inner);
            console.log(this.inner);
        }
    }
})();
var obj2 = (function() {
    var inner = '2-1';
    return {
        inner: '2-2',
        say: function() {
            console.log(inner);
            console.log(this.inner);
        }
    }
})();


say();
obj1.say();
obj2.say();
obj1.say = say;
obj1.say();
obj1.say = obj2.say;
obj1.say();

9、跨域

简单解释下跨域的概念
实现跨域的常见方式有哪些
手写
cors:
jsonp:

10、爬楼梯问题

爬楼梯问题:爬楼梯时,每一步会有两个选择:爬一个台阶和爬两个台阶,问:楼梯总台阶数为n,则一共有多少种爬法,写一个函数f,使得:总的爬法= f(n)。举例:n=3时,则共有:(1,1,1)、(1,2) 、(2,1)三种爬法,则f(3)=3。

function dpa(n) {
    for (let i = 0; i < n.length ; i++) {
        let b = undefined;
        result.push(b);
    }
    for (let i=0;i<n.length;i++){
        if (i<3) {
            result[i]=i
        }else {
            result[i]=result[i-1]+result[i-2]
        }
    }
    return result

}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值