JavaScript is required

Kết quả đoạn code sau là:
function withVar() {
const b = () => a;
var a = 24;
return b;
}
function withLet() {
const b = () => a;
let a = 24;
return b;
}
function changingValue() {
let a = 24;
const b = () => a;
a = 42;
return b;
}

A.
undefined Error 42
B.
24 Error 24
C.
24 24 42
D.
undefined Error 24
Trả lời:

Đáp án đúng: C


Đoạn code kiểm tra sự khác biệt giữa `var` và `let` trong JavaScript, cũng như cách closure hoạt động. * **`withVar()`**: Vì `a` được khai báo bằng `var`, nó được hoisting lên trên đầu scope của function. Tuy nhiên, việc gán giá trị `24` chỉ xảy ra sau khi `b` được định nghĩa. Do đó, khi `b` được gọi, nó tham chiếu đến `a` trong scope chứa nó, và `a` đã được gán giá trị `24`. * **`withLet()`**: Vì `a` được khai báo bằng `let`, nó không được hoisting theo cách tương tự như `var`. Khi `b` được định nghĩa, `a` vẫn chưa được khởi tạo trong scope của nó, dẫn đến lỗi `ReferenceError` khi cố gắng truy cập `a` trước khi nó được khởi tạo. * **`changingValue()`**: `a` được khai báo bằng `let` và được khởi tạo với giá trị `24`. `b` được định nghĩa để trả về giá trị của `a`. Sau đó, `a` được gán giá trị `42`. Khi `b` được gọi, nó trả về giá trị hiện tại của `a`, là `42`.

Tổng hợp 500 câu hỏi trắc nghiệm Javascript có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan