文章目录
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
}