Yêu cầu thg 8 28, 2:46 SA 68 0 3
  • 68 0 3
+1

Hỏi về cấu trúc IIFE và kết quả thực thi

Chia sẻ
  • 68 0 3

Xin chào mọi người. Mình đang tìm hiểu về javascript và thấy cấu trúc hàm IIFE, mình test thử với nhóm lệnh sau:

(function (exports) {
  "use strict";
  console.log(exports);
})(0123);

Sau khi run, mình thấy kết quả in ra là 83. Mình k hiểu là sao kết quả được in ra là 83. Ai có thể thông não giúp mình k ạ. Mình cảm ơn.

3 CÂU TRẢ LỜI


Đã trả lời thg 8 28, 7:32 SA
Đã được chấp nhận
0

Kết quả của đoạn mã JavaScript trên là 83 do cách nó xử lý tham số truyền vào hàm.

Khi bạn truyền 0123 vào hàm, JavaScript coi nó là một số nguyên trong hệ bát phân (octal) vì nó bắt đầu bằng số 0. Trong hệ bát phân, số 123 tương ứng với:

1 x 8^2 + 2 x 8^1 + 3 x 8^0 = 64 + 16 + 3 = 83

Vì vậy, khi console.log(exports); được thực thi, giá trị của exports83.

Chia sẻ
Đã trả lời thg 8 28, 7:21 SA
0

số 0 ở đầu số nghĩa là đang viết theo hệ cơ số 7, đổi sang cơ số 10 sẽ là 83.

Chia sẻ
Đã trả lời thg 9 21, 4:19 SA
0

Chào bạn!

Haha, cái này thú vị đấy chứ! Vấn đề nằm ở chỗ bạn đang truyền vào một số octal (hệ cơ số 8) vào hàm IIFE.

0123 trong Javascript khi truyền vào hàm được hiểu là một số octal. Trong hệ octal, 123 có giá trị tương đương với 83 trong hệ thập phân. Đó là lý do bạn thấy kết quả in ra là 83.

Tóm lại:

  • IIFE (Immediately Invoked Function Expression) được sử dụng để tạo ra một scope riêng biệt
  • Bạn truyền vào đối số 0123 được mặc định hiểu là số octal
  • Kết quả được in ra do Javascript chuyển đổi số octal 0123 sang số thập phân 83.

Hy vọng lời giải thích này đủ rõ ràng và hài hước!

Chia sẻ
Avatar Hoang vn @wiliamfeng
thg 10 2, 2:50 SA

Hàm JavaScript này trả về kết quả 83 do cách xử lý của JavaScript đối với các số có tiền tố 0. Trong phiên bản ECMAScript 5, các số có tiền tố 0 được hiểu là các số bát phân (octal). Hãy phân tích chi tiết:

Giá trị 0123: Trong JavaScript, nếu một số bắt đầu bằng số 0 và không có tiền tố kiểu như 0x (hex) hay 0o (bát phân theo ECMAScript 6), nó sẽ được hiểu là một số bát phân.

Số 0123 là một số bát phân, tương đương với số thập phân: image.png

Do đó, 0123 trong mã này tương đương với 83 trong hệ thập phân.

Hàm console.log(exports): Tham số exports nhận giá trị đầu vào là 0123, tức là giá trị 83 sau khi được chuyển đổi từ hệ bát phân sang hệ thập phân.

Kết quả được in ra trong console là 83.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí