JavaScript 基础核心知识点闯关练习

JavaScript 基础核心知识点闯关练习(2025–2026 版)

这份闯关题覆盖了 JavaScript 最核心、最常被考察的基础部分:
变量声明 & 作用域、Hoisting、闭包、this、类型转换、原型链、函数性质、异步基础(Promise & async/await)等。

8 关,每关 3–5 题,难度递增。
每题后我会先放选项,你可以在心里选答案(或写下来),然后往下拉看解析 + 正确答案

准备好了吗?开始!

第1关:变量声明 & 作用域(var / let / const)

1-1

console.log(a);
var a = 1;

输出是什么?
A. undefined
B. 1
C. ReferenceError

1-2

let x = 10;
if (true) {
  let x = 20;
  console.log(x);
}
console.log(x);

输出?
A. 20 10
B. 10 10
C. 20 20
D. ReferenceError

1-3

const obj = { name: "Alice" };
obj.name = "Bob";
console.log(obj.name);

obj = { name: "Charlie" };  // 这行会怎样?

A. Bob (第二行抛 TypeError)
B. Bob (第二行正常,但 obj 变成 Charlie)
C. TypeError 从第一行开始

1-4(经典坑)

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 0);
}

输出?
A. 0 1 2
B. 3 3 3
C. 0 0 0

第2关:Hoisting(提升)

2-1

foo();
function foo() {
  console.log("foo");
}

输出?
A. foo
B. ReferenceError
C. undefined

2-2

console.log(x);
var x = 5;
function x() {}
console.log(x);

输出?
A. undefined 5
B. function x(){} 5
C. 5 5
D. TypeError

2-3

console.log(a);
let a = 10;

输出?
A. undefined
B. 10
C. ReferenceError(TDZ)

第3关:闭包(Closure)经典题

3-1

function createCounter() {
  let count = 0;
  return function() {
    return ++count;
  };
}

const counter1 = createCounter();
const counter2 = createCounter();

console.log(counter1()); // ?
console.log(counter1()); // ?
console.log(counter2()); // ?

输出?
A. 1 2 1
B. 1 2 3
C. 1 1 1

3-2(for 循环闭包经典)

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 0);
}

输出?
A. 0 1 2
B. 3 3 3
C. 1 2 3

第4关:this 指向(最爱考)

4-1

const obj = {
  name: "Obj",
  say: function() {
    console.log(this.name);
  }
};

const say = obj.say;
say();                // ?
obj.say();            // ?

A. undefined Obj
B. Obj Obj
C. undefined undefined

4-2

function Person(name) {
  this.name = name;
}

const p = new Person("Alice");
console.log(p.name);  // ?

const p2 = Person("Bob");
console.log(name);    // ?

A. Alice Bob
B. Alice undefined
C. Alice ReferenceError(严格模式)

4-3(箭头函数)

const obj = {
  name: "Obj",
  say: () => console.log(this.name),
  say2() { console.log(this.name); }
};

obj.say();   // ?
obj.say2();  // ?

A. undefined Obj
B. Obj Obj
C. undefined undefined

第5关:类型 & 隐式转换

5-1

console.log([] + {});          // ?
console.log({} + []);          // ?
console.log([] + {} === {} + []);  // ?

5-2

console.log(1 + "2" + "2");    
console.log(1 + +"2" + "2");   
console.log("1" - "1" + "2");  

第6关:原型 & 继承基础

6-1

function Animal() {}
Animal.prototype.sound = "???";

const dog = new Animal();
console.log(dog.sound);        // ?

dog.sound = "Woof";
console.log(dog.sound);        // ?
console.log(Animal.prototype.sound);  // ?

6-2

console.log({}.__proto__ === Object.prototype);  // ?
console.log([].__proto__ === Array.prototype);   // ?
console.log(function(){}.__proto__ === Function.prototype); // ?

第7关:Promise & async/await 基础

7-1

Promise.resolve(1)
  .then(x => x + 1)
  .then(x => { throw new Error("Error") })
  .catch(x => x.message)
  .then(x => console.log(x));

输出?
A. Error
B. undefined
C. 2

7-2

async function test() {
  console.log(1);
  await Promise.resolve();
  console.log(2);
}

console.log(0);
test();
console.log(3);

输出顺序?
A. 0 1 3 2
B. 0 1 2 3
C. 1 0 3 2

第8关:综合小题(实战级)

8-1
写出下面代码的输出(考察 this + 闭包 + 异步):

const obj = {
  value: 42,
  getValue: function() {
    return this.value;
  }
};

const fn = obj.getValue;
console.log(fn());

setTimeout(() => console.log(obj.getValue()), 0);

8-2

let a = 10;
function outer() {
  let a = 20;
  function inner() {
    console.log(a);
  }
  a = 30;
  return inner;
}
outer()();

答案 & 解析区(先别往下拉!自己做完再看)

点击展开全部答案 + 详细解析

1关
1-1: A (var 声明提升,初始化留在原位)
1-2: A (let 块级作用域)
1-3: A (const 保护的是引用,对象属性可改)
1-4: B (var 函数作用域 + 闭包经典坑)

2关
2-1: A (函数声明整体提升)
2-2: A (var 提升,函数提升覆盖 var,但赋值后变 number)
2-3: C (let 有 TDZ)

3关
3-1: A (每个 counter 有独立闭包)
3-2: A (let 块级 + 每次循环新变量)

4关
4-1: A (普通调用 this → window/global)
4-2: A (new 绑定 this;非严格模式下 this → window)
4-3: A (箭头函数 this 继承外层)

5关
5-1: [object Object] [object Object] false
5-2: “122” “32” “02”

6关
6-1: ??? Woof ??? (原型未变)
6-2: true true true

7关
7-1: A (catch 捕获后 then 拿到 Error 对象.message)
7-2: A (0 1 3 → 微任务 2)

8关
8-1: undefined 42
8-2: 30 (inner 闭包捕获 outer 的 a,最后赋值为 30)

做对多少关?
8/8 → 基础很扎实,继续刷中高级题
5–7 → 不错,但有几处经典坑要补
<5 → 建议重新系统复习「你不知道的 JavaScript」上卷

想继续?
A. 下一轮:中级题(事件循环、微任务、Generator、Proxy 等)
B. 重做本轮(我随机打乱顺序出新题)
C. 针对某关弱项专项练习(比如只刷 this / 闭包 / Promise)
D. 直接来 10 道综合代码预测题(带 console 输出)

告诉我字母(或关数),我们继续闯!

文章已创建 4138

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部