Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Vấn đề trong hàm tự thực thi ẩn danh (IIFE) JavaScript là gì?

Cho đoạn mã, cần đoán đầu ra và giải thích:

var name = 'Zakir'; (() => {    name = 'Rahul';    return;    console.log(name);    function name(){       let lastName = 'Singh';    } })(); console.log(name);

Phân tích sơ bộ (sai):

  1. 'Zakir' lưu vào biến name
  2. Vào IIFE
  3. Biến name gán lại 'Rahul'
  4. Gặp return, thoát hàm
  5. In name toàn cục → 'Rahul'

Kết quả sai. Phân tích đúng với hoisting:

  1. 'Zakir' lưu vào biến name toàn cục
  2. Vào IIFE
  3. Hàm name() được nâng lên đầu phạm vi hàm
  4. Tại thời điểm đó, code như sau:

Ví dụ trạng thái trung gian

let name = 'Zakir'; (() => {    let name;    name = 'Rahul';    return;    console.log(name);    name = function(){       let lastName = 'Singh';    } })(); console.log(name);

Biến cục bộ name được khai báo (hoisting), gán 'Rahul' cho biến cục bộ, không ảnh hưởng biến toàn cục. Thoát hàm, in biến toàn cục vẫn là 'Zakir'.

Kết quả

Zakir