文章目录
📈「作者简介」:不知名十八线技术博主
📚「推荐主页」:阿珊和她的猫
🕐「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)
前端面试可能会出现一些具有挑战性的问题,以评估面试者的深度和技能水平。以下是一些可能的 “十大刁钻问题” 的示例:
1. 闭包
请解释什么是闭包并提供一个实际的例子。
闭包是指内部函数可以访问外部函数作用域中变量或函数的特性。
在 JavaScript 中,当一个内部函数被定义在外部函数内部,并且引用了外部函数的变量时,就创建了一个闭包。
具体来说,闭包由两部分组成:
- 内部函数以及它所在的词法环境(包含了内部函数定义时的作用域链)。
内部函数可以访问外部函数的变量,即使外部函数已经执行完毕,该变量的引用仍然保留在内部函数的词法环境中。
以下是一个具体的闭包示例:
function outerFunction() {
var outerVariable = 'I am from outer';
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
var closure = outerFunction();
closure(); // 输出: "I am from outer"
在上面的例子中,outerFunction
内部定义了一个 innerFunction
,并从内部函数中访问了 outerVariable
,尽管 outerFunction
已经执行完毕。当我们调用 outerFunction
并将其返回值赋给 closure
变量时,closure
实际上获得了对 innerFunction
的引用,而 innerFunction
依然可以访问 outerVariable
,因此在调用 closure
时,它能正确地打印出 “I am from outer”。
这就是闭包的概念:内部函数 innerFunction
通过保留对外部函数 outerFunction
的词法环境的引用,使得外部函数的变量在内部函数中仍然可访问。闭包在 JavaScript 中具有广泛的应用,可以用于实现封装、模块化和私有成员等功能。
2. this 指针
请解释 JavaScript 中的 this 关键字,并指出它在不同情况下的值。
JavaScript 中的关键字 this
是一个特殊的对象引用,它指向当前执行代码的上下文对象。具体 this
的值取决于函数的调用方式和上下文环境。
在 JavaScript 中,this
的值在以下情况下可能会有不同的取值:
1. 全局环境
在全局作用域中,函数没有被绑定到任何对象上时,this
指向全局对象(在浏览器环境中是 window
,在 Node.js 中是 global
)。
2. 函数调用
当函数作为独立函数调用时,this
指向全局对象。(在严格模式下,它将是 undefined
)
function myFunction() {
console.log(this);
}
myFunction(); // 浏览器环境下输出: Window,Node.js 环境下输出: global
3. 方法调用
当函数作为对象的方法调用时,this
指向调用该方法的对象。
var obj = {
name: 'ChatAI',
greet: function() {
console.log('Hello, ' + this.name);
}
};
obj.greet(); // 输出: "Hello, ChatAI"
4. 构造函数
当函数作为构造函数使用时,this
指向正在创建的实例对象。
function Person(name) {
this.name = name;
}
var person = new Person('Alice');
console.log(person.name);