面试题:var、let、const区别
var、1et、const 共问点都是慰蜒声明变重的
区别一:
var具有变量提升的机制
let和const没有变量提升的机制
区别二:
var可以多次声明同一个变量
let和const不可以多次声明同一个变量
区别三:
var、let声明变量的
const声明常量
var和1et声明的变量可以再次赋值,但是const不可以再次赋值了。
区别四:
var声明的变量没有自身作用域
let和const声明的变量有自身的作用域
面试题:作用域考题
考题一:let和const没有变量提升性
console.log( str ); // undefined
var str = '你好';
console.1og(num); // 报错
let num = 10;
考题二:
function demo(){
var n = 2;
if( true ){
var n = 1;
}
console.log( n ); // 1
}
demo();
function demo(){
let n = 2;
if( true ){
let n = 1;
}
console.log( n ); // 2
}
demo();
考题三:可以修改
const abjl = {
a:1
}
obj.a = 11111;
console.log(obj) // {a:11111}
const arr = ['a','b','c'];
arr[0]= 'aaaaa';
console.log( arr ); // ['aaaaa','b','c']
面试题:将下列对象进行合并
/*
用你知道的方法合并下列对象,尽量写多个答案
const a={a:1,b:4}
const b={b:2,c:3}
*/
const a = {a:1,b:4}
const b = {b:2,c:3}
方法一:Object.assign
let obj1 = Object.assign(a,b);
console.log( obj1 ); // {a:1,b:2,c:3}
方法二:ES6
let obj2 = {...a, ...b};
console.log( obj2 ); // {a:1,b:2,c:3}
方法三:自封装
function extend( target, source ){
for(var key in source){
console.log(key) // b , c
target[key] = source[key];
}
return target;
}
console.log( extend(a,b)); // {a: 1, b: 2, c: 3}
面试题:箭头函数和普通函数有什么区别?
1. this指向的问题
箭头函数中的this是在箭头函数定义时就决定的,而且不可修改的(call、apply、bind)、
****箭头函数的this指向定义时候、外层第一个普通函数的this
2. 箭头函数不能new(不能当作构造函数)
3. 箭头函数没有 prototype 原型
4. 箭头函数没有 arguments 对象
面试题:Promise有几种状态及优缺点
Promise有三种状态: Pending (等待中)、 Fulfilled (已成功)、 Rejected (已失败。Promise的状态只能从Pending变为Fulfilled或Rejected,且一旦改变,状态就不会再次改变。这种特性使得Promise非常适合表示异步操作的结
Promise状态变化过程
Pendin:初始状态,既没有被Fulfilled(成功),也没有被Rejected(失败)。在这个状态下,Promise的then方法和catch方法都不会被执行。
Fulfille:异步操作成功完成后的状态。这时,then方法中的回调函数会被执行,并将异步操作的结果作为参数传递给回调函数。
Rejecte:异步操作失败后的状态。这时,catch方法中的回调函数会被执行,并将异步操作的错误原因作为参数传递给回调函数。
Promise的优点和缺点
优点:
链式调:通过.then()串联异步操作,解决多层嵌套回调的“回调地狱”问题,结构更扁平。
统一错误处:.catch()可集中捕获链中任意环节的异常,避免分散的错误处理逻辑。
并行控:Promise.all()和Promise.race()等方法支持批量管理异步任务,提升执行效
缺点:
无法取:Promise执行后无法终止,可能导致资源浪费。
静默失:未添加.catch()或错误未被捕获时,错误会“吞没”,不易调试。
无进度反:无法像事件监听那样实时获取操作进度(例如文件上传百分比)
面试题:find和filter的区别
区别一:返回的内容不同
filter: 返回是新数组
find: 返回具体的内容
区别二:
find: 匹配到第一个即返回
filter: 返回整体(没一个匹配到的都返回)
let arr = [123,13,13,1,31,1,2,4];
console.log(arr.filter(val => {return val > 2})) // [123,13,13,31,4]
console.log(arr.find(val => {return val > 2 })) // 123
面试题:some和every的区别
some ==》 如果有一项匹配则返回true
every ==》 全部匹配才会返回true
var arr = [1,4,2,10,6];
var brr = arr.some(val=>{
return val > 4;
})
console.log( brr ); // true
var crr = arr.every(val=>{
return val > 4;
})
console.log( crr ); // false