Ngoài ra, tôi muốn thêm một số thứ khác.
Đầu tiên, hãy nghĩ đến onclick
là thuộc tính thông thường của một đối tượng.
Vì vậy, object.onclick = value
nơi value = functionName()
là hoàn toàn ổn, ví dụ, functionName()
có thể được trả lại một giá trị sử dụng return something;
Nhưng onclick
không phải là một tài sản thông thường. Khi động cơ JS trong trình duyệt gặp bài tập để tính dựa kiện (ví dụ onclick
, ondblclick
, onmouseover
, vv), nó tạo ra một chồng cho mỗi phần tử , bao gồm bản đồ b/w onSomeEvent và handler.
Trình xử lý là đối tượng hàm. Nhưng nếu bạn làm điều gì đó như element.onSomeEvent = functionName();
bạn chỉ đơn giản là gọi chức năng functionName()
và điều này có thể đã được ổn nếu functionName()
được định nghĩa là
function functionName() {return function(){/*do something*/};}
Nhưng vì functionName
trong trường hợp của bạn không được trả lại một chức năng, bạn sẽ thấy một Kêt quả bât ngơ.Đây là nhược điểm chính của về các ngôn ngữ như JavaScript. Trong một ngôn ngữ mạnh mẽ gõ mà có thể có ném một lỗi ... vì
class Element {
Function onclick = null;
Function ondblclick = null;
/*other code*/
}
document.getElementById('idName').onclick = new Function(); // correct
document.getElementById('idName').onclick = function(){}; // correct
document.getElementById('idName').onclick = functionName();
/*
* correct if functionName defined as
* Function functionName() {return new Function();} or
* Function functionName() {return function(){};}
* and incorrect for any other case
*/
You are not thi đầu tiên, thì tại sao bạn thực hiện điều thứ hai với những '()'? Loại bỏ chúng và bạn ổn. –