Không thể chỉ cho bạn đặc điểm kỹ thuật, nhưng tôi rất khuyên bạn nên đọc Douglas Crockford's "Javascript: The good parts". Cuốn sách này sẽ giúp bạn hiểu hầu hết các tính năng kỳ lạ nhưng tuyệt vời của JavaScript.
Tính đến câu hỏi của bạn:
- foo.bar(),
this
từ khóa trong bar
hàm được ràng buộc để foo
đối tượng
- (foo.bar)() là tương tự như trên,
Trong javascript, bạn có thể gán các biến từ phải sang trái nhiều lần
z = 3; x = (y = z); console.log (x); // 3
chức năng là các biến khác. Vì vậy, bạn đang gán hàm foo.bar
đến foo.bar
, nhưng dấu ngoặc đơn làm cho hàm được gán được trả về và sau đó được thực hiện.
(foo.bar = foo.bar)();
//is the same as
var f = (foo.bar = foo.bar);
f();
//and this also the same as:
var f= foo.bar;
f();
Chức năng trở về từ ngoặc không bị ràng buộc bất cứ điều gì, vì vậy this
sẽ đề cập đến đối tượng toàn cầu, trong trường hợp trình duyệt - đến đối tượng window
.
4 .. Mệnh (foo.bar, foo.bar)() chỉ là như nhau:
a = (3, 4); //last value is returned, first just parsed.
//a contains 4
var f = (foo.bar, foo.bar);
//f contains body of foo.bar function,
f() // is executed in the context of `global` object, eg. `window`.
Vui lòng đọc về binding
các chức năng trong JavaScript.
trong IE có vẻ như đầu ra là 20,20, không xác định, không xác định .. – RameshVel