Hỏi về cấu trúc IIFE và kết quả thực thi
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 ANSWERS
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 exports là 83.
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ân83
.
Hy vọng lời giải thích này đủ rõ ràng và hài hước!
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:
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.