绑定到脚本标记的javascript代码的生命周期是什么

绑定到脚本标记的javascript代码的生命周期是什么,javascript,dom,Javascript,Dom,我对网络应用相对较新,目前在开发网络应用的过程中,我正在通过一些漂亮的新技术和框架工作 最近,我一直在使用jquery.load()在运行时重新加载页面的一部分,从而实现一页应用程序 到目前为止,我在我的部分网页中嵌入了脚本,并使用自定义事件来初始化它们,而不是使用$('document').ready(),它在使用load时不会被触发 现在我想知道,当脚本标记所在的页面部分被另一个页面片段替换时,javascript代码会发生什么变化 显然,脚本标记DOM元素被丢弃了,但是函数、变量、处理程序

我对网络应用相对较新,目前在开发网络应用的过程中,我正在通过一些漂亮的新技术和框架工作

最近,我一直在使用jquery.load()在运行时重新加载页面的一部分,从而实现一页应用程序

到目前为止,我在我的部分网页中嵌入了脚本,并使用自定义事件来初始化它们,而不是使用$('document').ready(),它在使用load时不会被触发

现在我想知道,当脚本标记所在的页面部分被另一个页面片段替换时,javascript代码会发生什么变化

显然,脚本标记DOM元素被丢弃了,但是函数、变量、处理程序等会发生什么变化呢?它们是否仍然可用,或者我注册的处理程序现在是否未定义,并在触发时抛出异常

目前我正在研究require.js,我想知道这是否会(取决于以上问题的答案)改变我脚本的生命周期,因为require.js加载脚本时,它们没有绑定到可能被丢弃的DOM元素


托马斯欢呼

当浏览器解析一个
标记时,一切都停止,代码被评估。一旦执行开始,
标记就不相关了——它甚至可以被它所包含的代码删除。如果脚本创建了任何全局变量,则它们将保留在全局变量空间中;如果定义了功能,同上;如果它束缚了一些听众,他们将继续聆听。删除脚本不会影响全局空间(特别是,它不会倒带时间并擦除脚本执行过程中产生的任何更改)

像Require.JS这样的动态JS加载程序可以这样做:通过AJAX获取代码文本,创建一个脚本元素,然后将其插入到文档中,这使得浏览器可以执行上述操作。唯一的区别是发生这种情况时:
标记会暂停所有操作,直到代码执行为止(除非标记为
defer
),而Require.js会处理每个脚本的执行时间(并提供依赖项解析以控制该时间)

大多数应用程序最好不要在AJAX页面中加载JS,因为正如您所发现的那样,AJAX加载的JS不会自动清理自身,而是应用您在主页中加载的JS中的函数。不过,这不是一条牢不可破的法律