addEventListener、setTimeout函数

return false; does 3 separate things when you call it :
  1. event.preventDefault(); – It stops the browsers default behaviour.
  2. event.stopPropagation(); – It prevents the event from propagating the DOM.
  3. Stops callback execution and returns immediately when called.

当一个 EventListener 在 EventTarget 正在处理事件的时候被注册到 EventTarget 上,它不会被立即出发,但可能在事件流后面的事件触发阶段被触发,例如可能在捕获阶段添加,然后在冒泡阶段被触发。
// input blur 时间不会冒泡,但可以在 document 上捕获到

addEventListener 可以注册不同的处理函数
// 在执行所有相同 事件的处理函数之后才做默认动作;
用匿名函数传递参数或让注册函数返回一个带参数的函数
一个元素的多个事件按顺序执行处理函数。
如果多个相同的 EventListener 被注册到同一个 EventTarget,而且参数都是相同的,那么重复的实例会被抛弃。
通常来说 this 的值是触发事件的元素的引用,这种特性在为多个相似的元素使用同一个通用事件监听器时非常让人满意。当使用addEventListener() 注册事件的时候,this 会发生变化——应当注意到this的值是由函数调用者传递给函数的

setTimeout("var a=\"a\"", 500);字符串会在全局作用域内被解释执行,函数执行完毕后,字符串中的变量将形成全局变量.应该调用函数。

setTimeout 调用的代码运行在与所在函数完全分离的执行环境上.不能通过 call,apply 指定this,但是能通过执行bind(返回指定了this的函数)过的函数解决

// 和 setInterval 共享 ID 池,clearInterval() and clearTimeout() 可以互换

// Event.stopImmediatePropagation 会立即停止,甚至阻止了当前监听器的兄弟姐妹接收事件。

// attr 事件处理程序的 scope 是看元素的,有可能是 document,可以直接使用 document 上的方法: https://html.spec.whatwg.org/#event-handler-attributes