助力春招:解析15个大厂代码题!

Hello,大家好,我是 Sunday。

最近跟 1v1私教 的很多同学沟通了春招的问题,总结了 15 个中大厂中比较常见的代码题(看代码说结果),今天在这里分享给大家。助(祝)大家可以春招上岸,入职大厂!

01:变量提升和函数作用域

js 复制代码
var x = 1;
function foo() {
  x = 10;
  return;
  function x() {}
}
foo();
console.log(x); // Output: 1;

这个问题测试你对变量提升和函数作用域的理解。

在JavaScript中,变量和函数声明会被提升到它们各自作用域的顶部。函数x被提升到foo函数作用域的顶部,并且它变成了一个局部变量。foo函数内部的赋值x = 10 修改的是这个局部变量x,而不是全局变量。

因此,输出结果将是1。

02:函数内部变量提升

js 复制代码
var name = "Lokesh Prajapati";
(function() {
  console.log(name);
  var name = "Lokesh Prajapati";
})(); // Output: undefined;

这个问题测试你对函数内部变量提升的理解。

即使name变量在函数外部声明,函数内部的var name声明会被提升到函数作用域的顶部。然而,在console.log调用的时候,name的值是未定义的,因为赋值var name = "Jane Doe"; 还没有被执行。

输出将是undefined。

03:函数表达式和typeof运算符

js 复制代码
var x = 1;
if (function test() {}) {
  x += typeof test;
}
console.log(x); // Output: 1undefined;

这个问题检验了你对函数表达式和typeof运算符的理解。

if语句中有一个函数表达式,它的值为true,并且进入了代码块。然而,在外部作用域中f并未定义,因为它是一个函数表达式而不是一个函数声明。

因此,typeof f 的结果将是 'undefined',输出将是 1undefined。

04:函数提升、函数声明、变量声明顺序

js 复制代码
function sayHelloWorld() {
  return sayGoodbyWorld();
  var sayGoodbyWorld = function() {
    return "Hello, World!";
  };
  function sayGoodbyWorld() {
    return "Goodbye, World!";
  }
}
console.log(sayHelloWorld());

这个问题测试你对函数提升和函数声明以及变量声明顺序的理解。

函数sayGoodbyWorld被提升到sayHelloWorld函数作用域的顶部,而sayGoodbyWorld变量声明也被提升,但它的赋值没有被提升。

因此,第一个sayGoodbyWorld函数被使用,输出将是"Goodbye, World!"。

05:原型和继承

js 复制代码
function Parent() {}
function Child() {}
Child.prototype = new Parent();
var obj = new Child();
console.log(obj instanceof Parent); // Output: true;

这个问题考察了你对JavaScript中原型和继承的知识。

这段代码创建了一个Parent和一个Child构造函数。Child的原型被设置为一个Parent的实例,从而创建了一个原型链。当使用Child构造函数创建obj时,它会继承自Parent。

输出为 true。

06:函数内变量提升

js 复制代码
var x = 10;
function testValue() {
  console.log(x);
  var x = 20;
}
testValue(); // Output: undefined;

这个问题检验了你对函数内变量提升的理解。

testValue函数内的var x声明会被提升到函数作用域的顶部,但它的赋值不会被提升。

因此,在console.log时,x是未定义的,输出将是undefined。

07:基于原型的继承和函数引用相等性

js 复制代码
function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  return "Hello, my name is " + this.name;
};

var person1 = new Person("张三");
var person2 = new Person("李四");

console.log(person1.greet === person2.greet); // Output: true;

这个问题测试你对基于原型的继承和函数引用相等性的了解。

person1和person2都是Person构造函数的实例,并且它们通过原型链共享相同的greet方法。

因此,输出将是true,因为对于两个实例来说,greet函数的引用是相同的。

08:类型转换、真值和假值

js 复制代码
console.log([] == ![]); // Output: true;

这个问题检验了你对 JavaScript 中类型转换、真值和假值的理解。

数组 [] 是真值,而 ! 运算符对其取反,使其变为假值。当使用抽象相等 ( == ) 运算符比较假值和真值时,两个操作数都会被转换为数字。假值会被转换为 0 。

因此,表达式变为 0 == 0 ,输出结果为 true 。

09:变量提升和函数返回值

js 复制代码
function sayHi() {
  return hi;
  var hi = "Hello, World!";
}
console.log(sayHi()); // Output: undefined.

这个问题检查了你对变量提升和函数返回值的理解。

变量 hi 的声明被提升到 sayHi 函数作用域的顶部,但它的赋值没有被提升。在 return 语句执行时,hi 是未定义的,这就是返回的值。

输出将是 undefined

10:闭包

js 复制代码
var x = 5;
function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}
var finalResult = outer();
finalResult();

这个问题测试你对闭包的理解。

外部函数创建了对变量 x 的闭包,内部函数可以访问它。当内部函数被调用时,它会记录来自闭包的变量 x 的值,即 10。

输出将是 10。

11:函数返回值

js 复制代码
function userData() {
  return userData;
}
console.log(typeof userData()); // Output: function;

这个问题测试你对函数返回值的理解。

userData函数返回它自己(函数引用)。

因此,调用typeof userData()的结果将是'function'。

12:变量提升和函数内部变量作用域

js 复制代码
var x = 10;
function testNum() {
  console.log(x);
  if (true) {
    var x = 20;
  }
  console.log(x);
}
testNum();

这个问题检查你对变量提升和函数内部变量作用域的理解。

在testNum函数内部,if块内的var x声明会被提升到函数作用域的顶部,但它的赋值不会被提升。因此,在第一个console.log中,x是未定义的。然后,在if块内给x赋值为20,在第二个console.log中,x将会是20。

输出将是:20。

13:数组比较

js 复制代码
var a = [1, 2, 3];
var b = [1, 2, 3];
console.log(a == b); // Output: false;

这个问题测试你对JavaScript中数组比较的理解。

虽然a和b包含相同的值,但在JavaScript中数组是引用类型。当使用抽象相等运算符(==)比较两个数组时,比较会检查两个操作数是否引用内存中的同一个数组对象,而在这里并非如此。

因此,输出结果将是false。

14:函数内变量提升

js 复制代码
var x = 5;
(function() {
  console.log(x);
  var x = 10;
})(); // Output: undefined;

这个问题考察了你对函数内变量提升的理解。

在立即调用的函数表达式(IIFE)内部声明的变量 x 会被提升到函数作用域的顶部,但它的赋值不会被提升。

因此,在 console.log 的时候,x 是未定义的,输出将是 undefined。

15:this 指向

js 复制代码
function a() {
  console.log(this);
}
var b = {
  foo: a
};
b.foo(); // Output: { foo: a };

这个问题测试你对JavaScript函数中this值的理解。

在这种情况下,函数a被作为对象b的方法调用,所以a内部的this值将指向对象b。

输出将是对象b本身。

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~

相关推荐
Pandaconda4 分钟前
【计算机网络 - 基础问题】每日 3 题(十)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
一只欢喜30 分钟前
uniapp使用uview2上传图片功能
前端·uni-app
尸僵打怪兽43 分钟前
后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)
前端·javascript·vue.js·elementui·axios·博客·后台管理系统
ggome1 小时前
Uniapp低版本的安卓不能用解决办法
前端·javascript·uni-app
Ylucius1 小时前
JavaScript 与 Java 的继承有何区别?-----原型继承,单继承有何联系?
java·开发语言·前端·javascript·后端·学习
前端初见1 小时前
双token无感刷新
前端·javascript
、昔年1 小时前
前端univer创建、编辑excel
前端·excel·univer
emmm4591 小时前
前端中常见的三种存储方式Cookie、localStorage 和 sessionStorage。
前端
Q186000000001 小时前
在HTML中添加视频
前端·html·音视频