前端面试题目

js

变量作用域与内存

  •  var  

声明作用域 在函数内部声明,属于局部变量;不在内部定义则为全局变量

var声明提升  

console.log(message)
var message
// 打印结果undefined
  • let 

let声明的变量不会提升 let声明的范围是块作用域

for循环中的let声明也只作用于for内部

for (let i = 0; i < 5; ++i) {
    setTimeout(() => {
        console.log(i)
    }, 0);
}
console.log(i) // I undefined

for (let i = 0; i < 5; ++i) {
    setTimeout(() => {
        console.log(i) // 0 1 2 3 4
    }, 0);
}
// console.log(i)


  • const

const和let很像,区别是声明必须初始化变量且不能修改,也是块级作用域

基本数据类型

undefined boolean string symbol object function number

typeof无法测出null的数据类型 测出的为object;

instanceof对于基本类型不适用,因为基本类型不是对象;

Object.prototype.toString.call()也可以检测类型

垃圾回收

通过自动内存管理实现内存分配和资源配置 解决方法:标记清理,应用计数

内存泄漏

定时器可能会导致内存泄漏,定时器一直不清理,或者没有运行结束,则其中引用的变量会一直占用内存 

闭包也会导致内存泄漏

闭包

函数内部创建另一个函数,即使外部函数已经执行完毕,但内部函数仍然在运行并且能够访问外部函数的变量

原型链

js的原型链是一种继承的方式,是由原型prototype,原型对象来实现的,每个js对象都连接一个原型对象,这个原型对象连接另一个对象,原型链的顶端是object.protype。当访问一个对象的属性时,沿着他的原型链查找,直到找到,或者到达顶端。

function Person(name) {
    this.name = name;
}
 
Person.prototype.greeting = function() {
    return 'Hello, my name is ' + this.name;
};
 
var person1 = new Person('Alice');
var person2 = new Person('Bob');
 
console.log(person1.greeting()); // 输出: Hello, my name is Alice
console.log(person2.greeting()); // 输出: Hello, my name is Bob

promise对象

异步编程的解决方案 避免回调地狱的发生

  • promise状态

具有三种状态 pending resolved rejected 两个回调函数作为promise的参数 分别是resolve和reject

promise从pending状态开始,如果执行成功就转到成功态并调用回调函数resolve,如果执行失败就转为失败态并调用回调函数reject

promise的方法使用

  • then()与c
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值