js基本功
let、const、var 有什么区别
-
作用域提升到声明它的函数(包括箭头函数)内部,或者提升到全局作用域(块级作用域无效)
-
var的提升,初始化不会提升
-
let和var可重新赋值
-
let和const在同作用域内不能重新声明
-
var提升为全局属性时,会成为window的属性
柯里化
function add(a, b) {
return a + b;
}
function curriedAdd(a) {
return function(b) {
return a + b;
};
}
const add5 = curriedAdd(5); // 返回一个函数,等待第二个参数
console.log(add5(3)); // 输出:8
call,bind,apply的区别
原型链
基本都是这个规律
let str = "Hello";
console.log(Object.getPrototypeOf(str)); // String.prototype
console.log(Object.getPrototypeOf(String.prototype)); // Object.prototype
console.log(Object.getPrototypeOf(Object.prototype)); // null
特殊关系:Function 和 Object
在JavaScript中,Function 和 Object 之间存在一个特殊的原型链关系:
console.log(Object.getPrototypeOf(Function.prototype)); // Object.prototype
console.log(Object.getPrototypeOf(Function)); // Function.prototype
console.log(Object.getPrototypeOf(Object)); // Function.prototype
console.log(Object.getPrototypeOf(Object.prototype)); // null
console.log(Object.getPrototypeOf(Function.prototype)); // Object.prototype
Function 和 Object 都是函数对象,它们的原型链相互交织。
Function.prototype 的原型是 Object.prototype。
Object 的原型是 Function.prototype。(特别注意)
var arr = [];
arr.constructor == Array; //true
Array.prototype.constructor === Array //true
Array ,String,Number等都是constructor 构造函数
防抖和节流
1. 防抖(Debounce)
实现代码:
function debounce(func, delay) {
let timer;
return function (...args) {
const context = this;
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(context, args);
}, delay);
};
}
应用场景:
- 输入框搜索:用户输入时,只有在用户停止输入一段时间后才触发搜索操作,减少不必要的请求。
- 窗口大小调整:在调整窗口大小时,只在调整完成后执行一次布局调整操作。</