Thực ra câu trả lời của Ma Jerez là một điểm rất quan trọng ở đây.cũng câu trả lời này đề cập đến điều này tương tự question: câu hỏi này liên quan đến một vài điều sau:
- Hoist: biến được hoisted trước khi thực thi mã khối;
=
thứ tự chuyển nhượng: nó chuyển từ phải sang trái;
- ngữ cảnh chung: ở chế độ không nghiêm ngặt, khi biến không được xác định, biến đó đi đến ngữ cảnh chung; nhưng sẽ ném vào chế độ 'sử dụng nghiêm ngặt';
example1:
;(function Anonymous(){
var a = b = {};
console.log(a==b); //true
})();
a
được kéo lên trong phạm vi Anonymous
thực hiện.
b
sẽ được bổ nhiệm làm {}
, nhưng vì b
không được định nghĩa, b
được gán cho bối cảnh toàn cầu window
, sau đó window.b
được gán {}
; sau đó window.b = {}
return
s {}
.
biến cục bộ a
được gán là {}.
Do đó, một vài điều thú vị xảy ra ở đây: local variable a
và global variable b
cả điểm đến cùng đối tượng {}
, vì vậy chúng ==
và ===
; hãy nhớ rằng {}=={}
cung cấp cho false
nếu không.
Lưu ý: nếu trong chế độ nghiêm ngặt:
;(function Anonymous(){
'use strict'
var a = b = {}; //Uncaught ReferenceError: b is not defined
})();
nhiệm vụ này liên tiếp sẽ không làm việc cùng một cách ...
Ý anh là gì "làm thế nào để làm việc này?" – Jamiec
Xem [Chuyển nhượng nhiều tay trái với JavaScript] (http://stackoverflow.com/questions/1758576/multiple-left-hand-assignment-with-javascript). –
@Jamiec: Nó hoạt động rất tốt, nhờ yêu cầu;) – Piskvor