2012-03-25 43 views
6

Như gdoron chỉ ra,Cách [b] [b = a, 0] hoán đổi giữa a và b?

var a = "a"; 
var b = "b"; 

a = [b][b = a,0]; 

sẽ trao đổi ab, và mặc dù nó trông giống một chút hacky, nó đã gây ra sự tò mò của tôi và tôi rất tò mò như thế nào nó hoạt động. Nó không có ý nghĩa gì với tôi.

+2

_ "một chút hacky" _ ??? rất nhiều hacky ... :-) – gdoron

+0

Có liên quan: [Cách tốt hơn để hoán đổi hai giá trị đối số là gì?] (http://stackoverflow.com/questions/8482402/whats-a-better-way-to-swap- hai tham số-giá trị) –

+0

Nó sẽ không có ý nghĩa hơn để bình luận về câu trả lời khác của godron và yêu cầu làm rõ trong câu hỏi ban đầu của bạn? –

Trả lời

7
var a = "a"; 
var b = "b"; 

a = [b][b = a, 0]; 

Hãy phá vỡ dòng cuối cùng thành từng miếng:

[b]  // Puts b in an array - a safe place for the swap. 
[b = a] // Assign a in b 
[b = a,0] // Assign a in b and return the later expression - 0 with the comma operator. 

nên cuối cùng nó là a =[b][0] - đối tượng đầu tiên trong mảng [b] =>b giao cho a

Live DEMO

đọc @am không phải tôi là nhận xét trong câu hỏi này:
When is the comma operator useful?
Nó là mã của mình ...

+0

Vì vậy, khi 'b' được đặt trong mảng, nó là an toàn? –

+1

@Derek. Nó sẽ không bị mất khi 'b = a' – gdoron

1

Nó có thể giúp (hoặc cản trở) để nghĩ về nó về việc xây dựng lambda ngữ nghĩa tương đương (ở đây, tham số c mất vị trí của nguyên tố 0):

a = (function(c) { b = a; return c; })(b); 
Các vấn đề liên quan