Computer >> Máy Tính >  >> Lập trình >> Javascript

Vấn đề này là gì trong chức năng ẩn danh selfexecuting của JavaScript?

Giả sử đây là một đoạn mã mẫu và chúng tôi được yêu cầu cho biết đầu ra có thể có cho đoạn mã và cung cấp giải thích cho đoạn mã đó

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

Hãy đi qua từng dòng vấn đề này với một cách tiếp cận đơn giản

1 → ‘Zakir’ được lưu trữ trong tên biến

3 → Chúng tôi nhập vào bên trong một chức năng ẩn danh tự thực thi

4 → Tên biến được khởi động lại thành ‘Rahul’

5 → câu lệnh return gặp phải, vì vậy chúng tôi thoát khỏi hàm

15 → in biến tên ra màn hình có giá trị hiện tại là ‘Rahul’

Vì vậy, kết quả cuối cùng sẽ là

Rahul

Nhưng, thật không may, nó đã sai, chúng ta hãy xem qua đoạn mã một lần nữa để xem chúng ta đã sai ở đâu, lần này hãy lưu ý đến khái niệm về biến và hàm.

1 → ‘Zakir’ được lưu trữ trong tên biến

3 → Chúng tôi nhập vào bên trong một chức năng ẩn danh tự thực thi

Khi chúng ta nhập hàm, chức năng treo hàm sẽ hoạt động và tên hàm () được xác định ở dưới cùng của hàm tự thực thi được đưa lên đầu của hàm tự thực thi Và ở trạng thái trung gian đó, mã sẽ giống như -

Ví dụ

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

Lưu ý rằng bất cứ khi nào một biến / hàm được kéo lên đầu phạm vi của nó, nó chỉ được xác định và khởi tạo, nó được khởi tạo ở vị trí thực của nó, ở trên cùng là không xác định, nhưng nó tồn tại.

Vì vậy, khi tên biến được khởi động lại thì đó là tên biến cục bộ được khởi động lại chứ không phải biến toàn cục, vì vậy, sau đó, chúng tôi trả về chức năng tự thực thi và in tên biếnglobal vào bảng điều khiển, bảng điều khiển vẫn giữ ‘Zakir’. Do đó, kết quả đầu ra sẽ là -

Đầu ra

Zakir