一个函数是否可以声明并附加到全局作用域,但是如果只是从jQuery文档就绪块中调用它,那么依赖于jQuery的代码,始终可以依赖于正常工作吗?
e.g:
<script src = "https://code.jquery.com/jquery-2.1.0.js"></sript>
<script>
function myFunc(){ alert( $('#someElem').text() ); }
$(function(){
myFunct();
})
</script>
在实践中,我已经看到这样做了很多,这些功能被完全写入单独的文件。我从来没有看到它失败,但我的一部分想知道这是否真的安全。
我认为至少部分取决于文档就绪是否等待完成页面加载的javascript 编译阶段。但是否有其他可能导致失败的原因?
请忽略污染全局名称空间,可读性等问题。我只关心可靠的执行。
答案 0 :(得分:1)
它确实不会失败,查找元素的$()
函数仅在执行myFunc
函数时执行,并且该函数仅在document.ready
触发时执行,因此该元素将在那时可用。
全局myFunc
函数也将始终可用,只要它在DOM中的document.ready
代码之前定义。
在许多情况下,如果在document.ready
代码之后定义为DOMContentLoaded
(和其他此类方法)是异步并且等待DOM准备就绪,它甚至可用,但不能保证全部脚本将在那时加载,只是DOM中的元素可用,因此通常应确保在myFunc
代码之前定义了$(function(){ ... });
函数。
答案 1 :(得分:0)
只有在myfunct()
范围之外可以访问document.ready()
时,才会编写此类构造。如果其他功能/事件也可以调用它,最好将其移出。
如果只打算调用一次或特定事件,它可能只嵌套在调用函数体中。
甚至可能想让函数调用完全包含的结构,比如clorjures等。在这种情况下,该函数也将嵌套在另一个var
声明中。
除此之外,似乎没有其他重大差异。
如果我错过任何事情,请添加!