Trong JavaScript, nếu bạn đặt một số loại biểu thức ở phía bên trái của một biểu thức gán, công cụ sẽ ném một tham chiếu. Ví dụ,JavaScript có khái niệm giá trị l và giá trị r không?
// 'this' on the left side
this = window; // ReferenceError: Invalid left-hand side in assignment
hoặc
// function call expression on the left side
var a;
var fn = function() {return a};
a === fn(); // true
a = 1; // 1
fn() = 5; // ReferenceError: Invalid left-hand side in assignment
hoặc
var a;
a = 1; // 1
(a) = 2; // 2
(1, a) = 3; // ReferenceError: Invalid left-hand side in assignment
Câu hỏi của tôi là:
Liệu JavaScript cũng có khái niệm về l-giá trị và r- giá trị như C?
Tại sao biểu thức cuộc gọi hàm không thể xuất hiện ở bên tay trái của biểu thức gán? Trong ví dụ trên, kể từ
a === fn()
, sự khác nhau giữaa = 5
vàfn() = 5
là gì. Tôi biết rằng ES5 spec yêu cầu này, nhưng tại sao nó được thiết kế như thế?
'fn() ' là một biểu thức và không phải là một tham chiếu biến, và bạn không thể gán bất cứ điều gì cho điều đó. –
Nhưng thứ tự đánh giá từ trái sang phải, nếu 'fn()' được đánh giá đầu tiên, nó sẽ trả về 'a', vì' fn() === a'. Và 'a' là một biến và có thể lưu trữ các giá trị. –
nó trả về giá trị của a, không phải là tham chiếu đến biến số –