📅  最后修改于: 2023-12-03 15:29:08.672000             🧑  作者: Mango
在进行JavaScript面试时,以下10个问题可能会在面试中被问到,了解这些问题将有助于为面试做好准备。
闭包是一个函数与其在定义时的环境的组合。它可以保存函数内部的变量和状态,并在全局环境中访问这些变量和状态。闭包在JavaScript中非常常见,并可用于数据的缓存、事件的绑定等等。
事件冒泡是指当在DOM结构中触发一个事件时,该事件将由子元素一直冒泡到父元素,并最终到达文档根的过程。例如,当在一个按钮上点击时,该事件将由按钮向其父级元素依次传递,直到HTML文档的根节点为止。
可以使用for-in
循环来遍历对象的属性。例如:
for (var propName in obj) {
// do something with obj[propName]
}
this
关键字指的是当前函数执行时的上下文。它的值取决于函数的调用方式。例如,在一个对象的方法中,this
引用该对象本身。在一个函数中,this
可能引用全局对象或调用该函数的对象。
JavaScript中的垃圾回收机制通过定期扫描内存中的对象来检查是否可垃圾回收。当一个对象不再有任何引用时,它会被回收,并释放内存。
在JavaScript中,可以通过原型继承来实现继承。这涉及到将子类的原型设置为父类的实例。例如:
function Parent() {}
Parent.prototype.parentMethod = function() {};
function Child() {}
Child.prototype = new Parent();
Child.prototype.childMethod = function() {};
在同步代码执行时,代码的执行顺序与其在代码中的位置相同。而在异步代码执行时,代码会被放在一个事件队列中,直到它被触发为止。例如,在使用回调函数处理某个操作的情况下,可以将该操作添加到事件队列中,直到该操作完成时调用回调函数。
事件循环是一个在JavaScript引擎中运行的循环,它会持续检查事件队列,以查看是否有事件处于等待状态。当有事件等待时,事件循环会将该事件从队列中提取出来,并执行相应的操作。任务队列是一个保存在事件循环中的队列,它存储JavaScript中的异步操作 task 。
可以使用函数来创建自定义对象。正如在原型继承中示例中所示,可以定义一个函数并将其原型设置为对象的构造函数。还可以向该函数添加属性和方法。例如:
function Person(name) {
this.name = name;
this.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
}
var person1 = new Person('Alice');
var person2 = new Person('Bob');
person1.sayHello(); // 输出 "Hello, my name is Alice"
person2.sayHello(); // 输出 "Hello, my name is Bob"
JavaScript回调函数是一个作为参数传递到其他函数中的函数。当某个操作完成后,其他函数将调用回调函数来处理该操作。例如,可以使用回调函数处理异步操作的结果。
function doSomethingAsync(callback) {
// 异步操作
// 将结果传递给回调函数
callback(result);
}
function handleResult(result) {
// 处理结果
}
// 调用 doSomethingAsync 并传递回调函数
doSomethingAsync(handleResult);
JavaScript回调函数的使用可以帮助在异步操作完成后正确地处理操作的结果。