1 Câu hỏi: Tại sao phương thức javascript handleEvent có quyền truy cập vào sự kiện với tham số sự kiện bị bỏ qua?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Theo MDN doc handleEvent event là tham số duy nhất của nó, tuy nhiên đây là ví dụ:

Codepen

mã html:

<button id="btn">Click here!</button>  

mã javascript:

const buttonElement = document.getElementById('btn');

buttonElement.addEventListener('click', function () {
  alert(event.type);
});

Hàm gọi lại xử lý Hàm không có tham số nào có thể truy cập sự kiện (nó cảnh báo 'nhấp chuột').

Nó hoạt động như thế nào?

Có bất kỳ tham chiếu nào nêu rõ rằng tham số event có thể được bỏ qua không?

    
4
  1. 2019-05-08 15: 42: 25Z
  2. Thx @melpomene đã giải quyết hoàn hảo câu hỏi của tôi 1 nhưng bạn có biết câu trả lời của câu hỏi 2 không?
    2019-05-08 15: 46: 32Z
  3. Ý bạn là gì khi hỏi 2?
    2019-05-08 15: 46: 52Z
  4. Chúng ta có thể sử dụng hàm (không có tham số) không tuân thủ chữ ký hàm handleEvent?
    2019-05-08 15: 48: 30Z
  5. Ồ, JavaScript không kiểm tra danh sách tham số. Ở tất cả. Bạn chỉ có thể bỏ qua các đối số đến hoặc xác định các tham số bổ sung (chúng sẽ là undefined).
    2019-05-08 15: 54: 28Z
1 Câu trả lời                              1                         

Trong JavaScript, khi bạn tham chiếu một biến, trước tiên, nó sẽ xem xét phạm vi cục bộ trước khi kiểm tra phạm vi toàn cầu. Trong trình duyệt của bạn, tất cả các biến trong phạm vi toàn cầu là thuộc tính của đối tượng window. Tra cứu window.event mang lại bài viết sau: https: //developer mozilla.org/en-US/docs/Web/API/Window/event . Đáng chú ý:

  

Sự kiện bất động sản Window chỉ đọc trả về Event hiện đang được xử lý bởi mã của trang web. Bên ngoài bối cảnh của một trình xử lý sự kiện, giá trị luôn là undefined.

Điều này có nghĩa là bất cứ lúc nào bạn đang xử lý một sự kiện, trình duyệt cũng liên kết sự kiện đó với phạm vi toàn cầu.

Cần lưu ý rằng, như đã đề cập trong bài viết, thực sự lợi dụng điều này là một ý tưởng tồi. Giá trị không phải lúc nào cũng như bạn mong đợi và nói chung, việc sử dụng các biến toàn cục không được ưa thích.

Một số ví dụ:

// This is OK - you don't have to call the passed event "event"
buttonElement.addEventListener('click', function (ev) {
  alert(ev.type);
});

// This is not OK - the global variable is named "event" so "ev" in this case is undefined
buttonElement.addEventListener('click', function () {
  alert(ev.type);
});

// This is OK but not preferred because it uses the global "event" variable
buttonElement.addEventListener('click', function () {
  alert(event.type);
});

// This the same as the preceding example
buttonElement.addEventListener('click', function () {
  alert(window.event.type);
});
    
2
2019-05-08 15: 55: 06Z
  1. Ngoài ra, nó hoàn toàn không hoạt động trong các phiên bản Firefox cũ hơn và bị tắt theo mặc định trong các phiên bản mới hơn.
    2019-05-08 15: 47: 38Z
  2. "bị tắt theo mặc định trong các phiên bản mới hơn" Tôi đang chạy 66 và nó hoạt động trên máy của tôi. Làm thế nào mới?
    2019-05-08 15: 48: 50Z
  3. Ồ, hả. Có vẻ như chúng đã được kích hoạt đầy đủ trong 66: nhà phát triển .mozilla.org /en-US /docs /Mozilla /Firefox /Phát hành /Khác
    2019-05-08 15: 53: 06Z
  4. Thx Ian nhưng tôi không tin lắm với 'Mọi tham số của bất kỳ chức năng nào đều có thể được bỏ qua', bạn có thể thấy các tham số tùy chọn được ký hiệu rõ ràng là 'tùy chọn' khác Các tài liệu MDN như developer.mozilla.org/en-US /docs /Web /API /EventTarget /Hoài
    2019-05-08 15: 53: 59Z
  5. @ mzoz Tôi đoán tôi đã không nói cụm từ đó rất tốt. Về cơ bản nếu bạn đang cung cấp chức năng gọi lại, bạn không phải xử lý mọi tham số đã truyền - nếu bạn không thêm tham số phù hợp cho chúng, chúng sẽ bị bỏ qua. Đó là bởi vì chức năng bạn đang cung cấp cuộc gọi lại chỉ là gọi lại cuộc gọi của bạn và khi bạn gọi một chức năng, bạn có thể chuyển bao nhiêu đối số như bạn muốn - các tính năng bổ sung sẽ bị bỏ qua. Tức là, alert chỉ mất một đối số, nhưng bạn có thể cung cấp 4 - 3 cuối cùng sẽ bị bỏ qua. alert("1","2","3","4") chỉ cần thông báo "1".
    2019-05-08 15: 59: 24Z
nguồn đặt đây