首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript面试问题:事件委托和this

希望你不仅仅是为了答案而阅读完这篇文章,每一篇文章会让对过去学过的知识有一个新的理解,或者重温你学习的东西,这有利于你用JavaScript实现所有交互。...点击按钮会导致事件流识别本身在容器下面的文本,每一个元素都接收同样的点击监听代码,由于事件捕获,点击事件会首先触发HTML节点绑定的点击处理程序,然后在事件冒泡阶段的末尾返回到最顶层元素。...事件处理程序可以调用stopPropagation告诉DOM事件停止冒泡,第二个方式是调用stopImmediatePropagation,它不仅停止冒泡,也会阻止这个元素上其它监听当前事件的处理程序触发...使用事件委托能减少监听器数量,在元素的容器上绑定事件意味着只需要一个监听器。这种方法的缺点是,父容器的侦听器可能需要检查事件来选择正确的操作,而元素本身不会是一个监听器。...元素操作在单页应用中是极其常见的,为某部分添加一个按钮这样简单的事情也会为应用程序创建一个潜在的性能块,没有合适的事件委托,就必须手动为每一个按钮添加监听,如果每个侦听器不清理干净,它可能会导致内存泄漏

1.3K50

前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。 在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数。...1.1.4、javascript表达式 迄今为止,在我们的模板中,我们一直都只绑定简单的属性键值。...中有一些内置的过滤器,而vue2中需要自定义。...在实现反向显示 message 之前,你应该确认它。这个问题在你不止一次反向显示 message 的时候变得更加糟糕。 这就是为什么任何复杂逻辑,你都应当使用计算属性。...不过,通常更好的办法是使用计算属性而不是一个命令式的 $watch 回调。

4.8K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    任务,微任务,队列和时间表

    为什么会这样 要了解这一点,您需要了解事件循环如何处理任务和微任务。第一次遇到这个问题可能会让您大吃一惊。...他们在之后运行promise回调setTimeout。他们可能将promise回调称为新任务的一部分,而不是微任务。 这是可以原谅的,因为承诺来自ECMAScript而不是HTML。...使用上面的相同示例,如果执行以下命令会发生什么: inner.click() 这将像以前一样开始事件调度,但是使用脚本而不是真正的交互。...上面的规则确保微任务不会中断执行中的JavaScript。这意味着我们不处理侦听器回调之间的微任务队列,而是在两个侦听器之后进行处理。 有什么关系吗? 是的,它会在不起眼的地方(哎呀)咬你。...Safari似乎因该修复程序而遭受竞争条件的折磨,但这可能只是IDB的无效实现。不幸的是,在IE / Edge中事情总是失败的,因为在回调之后无法处理突变事件。

    2.2K20

    Vue.js入门教程-指令

    指令的值限定为绑定表达式(JavaScript 表达式及过滤器规则)。指令的职责就是当其表达式的值改变时把某些特殊的行为应用到 DOM 上。 1.2 示例 ?...(4)通常来说,v-if 在切换时有更高的性能开销,而 v-show 在初始渲染时有更高的性能开销。...我们在选项对象的 data 属性中定义了一个 books 数组,然后在 #vue-app 元素内使用 v-for 遍历books 数组,输出每个 book 对象的书籍、作者和译者。...八、v-on 绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。 8.1 示例 ?...(3).capture - 添加事件侦听器时使用 capture 模式。 (4).self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。 (5).

    2.2K40

    23 个初级 Vue.js 面试题

    }, el: ‘#app’ }); 我们在 Vue 程序中创建了一个名为 “greeting” 的数据属性,但是只需要在 div 中用 mustache 语法输入 “greeting” 即可,而不必关心内部实现...这类似于在 JavaScript 中使用 elementSelector.innerText = text 语句。 5. 如何在输入框和数据属性之间实现双向数据绑定?...例如以下代码使用 v-on 指令在组件上实现 click 事件侦听器。...过滤器是在 Vue 程序中实现自定义文本格式的一种非常简单的方法。它们就像可以在表达式中通过管道传递(使用管道字符)以取得结果的运算符。...当用户键入内容时,将重新执行计算的方法,并且在验证格式之后,动态删除无效的类。 18. 如何确保在单文件组件中定义的 CSS 样式仅应用于该组件,而不被用于其他组件?

    4.7K10

    JS事件流

    事件 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。...专注于HTML文档和XML文档。 其中DOM1级事件处理标准中并没有定义事件相关的内容,所以没有所谓的DOM1事件处理 DOM2:对DOM1增加了 样式表对象模型 DOM2级定义了两个事件处理程序。...(观察者模式) addEventListener() ---添加事件侦听器 removeEventListener() ---删除事件侦听器 函数均有3个参数, 第一个参数是要处理的事件名 第二个参数是作为事件处理程序的函数...; div.dispatchEvent(e);} 复制代码 这个例子中创建了一个冒泡事件“myEvent”。...而event.detail的值被设置成了一个简单的字符串,然后在div和document上侦听该事件,因为在initCustomEvent中设置了事件冒泡。

    8.3K20

    【Web前端】系统中正在发生的“事件”

    , handleClick); 在单个事件上添加多个监听器 ​​addEventListener()​​​ 允许为相同的事件类型注册多个处理程序,这样就可以实现各自独立的行为。...; }); 这个例子中,单击按钮将依次触发两个不同的事件处理程序。...>点击我! 内联事件处理器——不要使用 虽然在HTML中使用内联事件处理器很方便,但这不是一个好习惯。它减少了代码的可维护性,增加了耦合度。...事件对象 当事件发生时,JavaScript会生成一个事件对象,包含有关事件的详细信息。在事件处理程序中,可以通过参数访问此对象。...在 Node.js 中,事件模型依赖于监听器来监控事件,而发射器则用来定期触发事件。

    7510

    IT课程 JavaScript基础 035_HelloJavaScript

    JavaScript最初由Netscape公司的布兰登·艾克 (Brendan Eich) 在1995年设计和实现,最初被称为”LiveScript”,后来改名为JavaScript。...事件驱动: JavaScript通常通过处理事件来实现与用户的交互,例如点击按钮、输入文本等。 脚本语言: JavaScript是一种脚本语言,它通常被解释而不是编译。...如何使用JavaScript 内部 JavaScript 在HTML文档内,通过标签将JavaScript代码嵌入在或标签中。这样的脚本会在页面加载时执行。...; 效果: 内联 JavaScript 内联引用是将JavaScript代码直接写在HTML标签的事件属性中,通常用于处理简单的、特定的交互或事件。...如:事件处理、DOM操作 示例: javascript:alert('Hello JavaScript!')">JavaScript测试 效果:

    10610

    JS 和 Node.js 中的“事件驱动”是什么意思?

    在 1987 年左右开始理论化,而观察者模式则出现在 1994 年由“四人帮”所写的著作《设计模式》中。 事件驱动是怎样用在浏览器中的 JavaScript 的?...浏览器中的主题和观察者 如果 HTML 元素是主题,那么谁是观察者?任何注册为侦听器的 JavaScript 函数都可以对浏览器中的事件做出反应。...回顾一下: HTML 元素是事件发送器。 JavaScript 中注册为侦听器的函数是观察者。 所有这些组件构成了“一个小小的事件驱动的体系结构。...在 Node.js 中,没有任何 HTML 元素,因此大多数事件都来自进程、与网络的交互、文件等。...服务器启动后立即触发 listening 事件,而客户端连接到 127.0.0.1:8081 时将触发 connection 事件(尝试一下!)。 在此示例中,server 是事件发送器,主题。

    8.4K20

    常见的三个 JS 面试题

    本文不是讨论最新的 JavaScript 库、常见的开发实践或任何新的 ES6 函数。相反,在讨论 JavaScript 时,面试中通常会提到三件事。...注意,我们将在下面的示例中使用原生的 JavaScript,因为面试官通常希望了解你在没有 jQuery 等库的帮助下对JavaScript 和 DOM 的理解程度。...他们希望你用 JavaScript 实现这个功能,假设有如下 HTML 代码: Walk the dog 事件侦听器,并将每个事件监听器绑定到 DOM ,这样代码执行的效率非常低下。 在面试中,最好先问面试官用户可以输入的最大元素数量是多少。...如果你的应用程序最终可能有数百个事件侦听器,那么更有效的解决方案是将一个事件侦听器实际绑定到整个容器,然后在单击它时能够访问每个列表项, 这称为 事件委托,它比附加单独的事件处理程序更有效。

    1.3K20

    Javascript 面试中经常被问到的三个问题!

    本文不是讨论最新的 JavaScript 库、常见的开发实践或任何新的 ES6 函数。相反,在讨论 JavaScript 时,面试中通常会提到三件事。...注意,我们将在下面的示例中使用原生的 JavaScript,因为面试官通常希望了解你在没有 jQuery 等库的帮助下对JavaScript 和 DOM 的理解程度。...他们希望你用 JavaScript 实现这个功能,假设有如下 HTML 代码: Walk the dog 事件侦听器,并将每个事件监听器绑定到 DOM ,这样代码执行的效率非常低下。 在面试中,最好先问面试官用户可以输入的最大元素数量是多少。...如果你的应用程序最终可能有数百个事件侦听器,那么更有效的解决方案是将一个事件侦听器实际绑定到整个容器,然后在单击它时能够访问每个列表项, 这称为 事件委托,它比附加单独的事件处理程序更有效。

    87320

    vue之组件边界情况处理

    举个例子,在和 JavaScript API 进行交互而不渲染 HTML 的抽象组件内,诸如这些假设性的 Google 地图组件一样: 这个属性是你的应用特有的,而不是通用化的,或者如果你想在祖先组件中更新所提供的数据,那么这意味着你可能需要换用一个像 Vuex 这样真正的状态管理方案了。...程序化的事件侦听器 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法。...在这个例子中,我们推荐创建一个可复用的组件。 想了解更多程序化侦听器的内容,请查阅实例方法 / 事件相关的 API。 注意 Vue 的事件系统不同于浏览器的 EventTarget API。...模板定义的替代品 内联模板 当 inline-template 这个特殊的特性出现在一个子组件上时,这个组件将会使用其里面的内容作为模板,而不是将其作为被分发的内容。这使得模板的撰写工作更加灵活。

    1K50

    掌握 Spring 之事件处理

    为了避免这样情况发生,我采用了 Spring 事件发布与订阅的方式来实现接受支付回调,发布通知更新订单状态的这个功能,让订单服务更新数据的操作只依赖特定的事件,而不用关心具体的触发对象,也能达到代码复用的目的...本文主要内容涉及如下: Spring 标准事件的处理 Spring 中自定义事件扩展实现 Spring Boot 的事件与侦听 示例项目: spring-events:https://github.com...@EventListener @Order(42) public void processEvent(Event event) { } 2.2 自定义事件 在了解如何侦听 Spring 事件后,我们再来看下如何实现自定义的事件发布和侦听处理...(前提是 Spring 程序启用 @EnableAsync 注解) 这里再提下使用异步方式处理事件的利弊,好处在于让我们程序在处理事件更加有效率,而缺点就在针对异常发生的处理更加复杂,需要借助 AsyncUncaughtExceptionHandler...另外,需要注意的是,当需要触发的事件是在 ApplicationContext 创建之前发生时,用 @Bean 方式注册的侦听器就不会执行,而 Spring Boot 为此提供了三种方式来处理这种情况:

    1.2K40
    领券