绑定到脚本标签的javascript代码的生命周期是什么?
what is the lifecyle of javascript code bound to a script tag
我对web应用程序比较陌生,目前在开发web应用程序时,我正在学习一些漂亮的新技术和框架。
我最近通过使用jquery.load()在运行时重新加载我的页面的一部分,向一个单页应用程序移动。
到目前为止,我有脚本嵌入在我的部分网页,并使用自定义事件来初始化它们,而不是使用$('document').ready(),这在使用load时不会被触发。
现在我想知道当他们的脚本标签所在的页面的一部分被另一个页面片段取代时,我的javascript代码实际上发生了什么。
显然,脚本标签DOM元素被丢弃,但发生了什么函数,变量,处理程序等?它们是否仍然可用,或者我现在注册的处理程序是否未定义,并在触发它们时抛出异常?
目前我正在看require.js,我想知道这是否会(取决于对上述问题的回答)改变我的脚本的生命周期,因为被require.js加载,它们不绑定到一个DOM元素,很可能被丢弃?
欢呼托马斯。
当浏览器解析<script>
标记时,一切都停止,并对代码进行评估。一旦执行开始,<script>
标记就无关紧要了——它甚至可以被它所包含的代码删除。如果脚本创建了任何全局变量,它们将保存在全局变量空间中;如果它定义了函数,同上;如果它约束了一些听众,他们就会继续听。删除脚本不会影响全局空间(特别是,它不会倒带时间并擦除脚本执行产生的任何更改)。
<script>
标记暂停一切,直到代码被执行(除非它被defer
标记),而Require.js处理每个脚本执行的时间(并给你依赖决议来控制那个时间)。
大多数应用程序最好不要在AJAX页面中加载JS,原因很简单——正如你所发现的那样——AJAX加载的JS不会自动清理自己,而是应用你在主页中加载的JS函数。然而,这并不是一条牢不可破的定律。
相关文章:
- 组件生命周期问题/无法处理未定义的问题
- 渲染方法与生命周期方法中的React计算
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 管理动态磁贴和应用程序生命周期
- 主干网的生命周期.js创建过程中的视图
- 使用Ember中的组件生命周期事件
- 关于Angular 1.5零部件生命周期挂钩
- 更新数据时的React.js生命周期
- 雷杜克斯.从容器组件描述表示组件的生命周期方法
- 增加服务工作线程的生命周期
- 是否有一种自动方法来确定(或查找)库的生命周期结束/支持终止通知
- 如何将请求生命周期事件封装在 happy.js 中
- 使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用
- 聚合物元素注册和生命周期(创建和准备调用两次)
- E_UNKNOWN beforeCreate 和其他生命周期回调的响应错误
- Aurelia 组件生命周期中的远程服务
- 节点.js简单的 Web 服务器请求生命周期
- 角度引导程序生命周期:在完全加载后运行代码
- 主干提取集合生命周期,从响应设置属性
- JQuery 插件架构,用于定义对象和变量生命周期