2017-12-14 98 views
6

Gán một giá trị mặc định sử dụng một biến có cùng tên ném một lỗi tham khảo:Giá trị đối số mặc định JS từ biến: tại sao số nhận dạng phải khác?

var a = 'adef'; 
var x = (a=a) => console.log(a); 
x(); 
=> "ReferenceError: a is not defined" 

Nhưng điều này là tốt:

var other = 'otherdef'; 
var x = (a=other) => console.log(a); 
x(); 
=> "otherdef" 

giả định của tôi là giá trị của a trong phạm vi bên ngoài sẽ được gán cho phạm vi mới.

Tôi đã cố gắng sử dụng const thay vì var, và class/function thay vì một mũi tên chức năng, nhưng kết quả luôn luôn là như nhau (thử nghiệm trong chrome 63 và nút 6).

Tôi có một cảm giác vấn đề là a là 'treo' trong phân và do đó việc chuyển nhượng là đề cập đến sự mới 'a' (mà tồn tại nhưng là undefined) ...

+0

Có, 'a' thực sự là [hoisted] (https://stackoverflow.com/q/31219420/1048572) trong [tham số phạm vi] (https://stackoverflow.com/q/44896829/1048572) – Bergi

Trả lời

0

Mục đích của hành vi này là để cho phép một tham số được mặc định khởi tạo giá trị của tham số khác, ví dụ:

var a = 2; 
var x = (a, b = a) => console.log(a, b); 
x(42); // 42 42 

Lập đặc biệt trường hợp a = a và hoạt động khác thể được thực hiện nhưng điều đó sẽ làm cho nó khó khăn hơn để cấu trúc lại chức năng sử dụng này hành vi (bạn sẽ không thể đổi ame tham số a mà không cần đổi tên biến mà nó phụ thuộc vào).

Các vấn đề liên quan