在文档就绪之外声明的函数中的jQuery,但是从内部调用

时间:2014-03-14 12:42:57

标签: javascript jquery

一个函数是否可以声明并附加到全局作用域,但是如果只是从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 编译阶段。但是否有其他可能导致失败的原因?

请忽略污染全局名称空间,可读性等问题。我只关心可靠的执行。

2 个答案:

答案 0 :(得分:1)

它确实不会失败,查找元素的$()函数仅在执行myFunc函数时执行,并且该函数仅在document.ready触发时执行,因此该元素将在那时可用。

全局myFunc函数也将始终可用,只要它在DOM中的document.ready代码之前定义。

在许多情况下,如果在document.ready代码之后定义为DOMContentLoaded(和其他此类方法)是异步并且等待DOM准备就绪,它甚至可用,但不能保证全部脚本将在那时加载,只是DOM中的元素可用,因此通常应确保在myFunc代码之前定义了$(function(){ ... });函数。

答案 1 :(得分:0)

只有在myfunct()范围之外可以访问document.ready()时,才会编写此类构造。如果其他功能/事件也可以调用它,最好将其移出。

如果只打算调用一次或特定事件,它可能只嵌套在调用函数体中。

甚至可能想让函数调用完全包含的结构,比如clorjures等。在这种情况下,该函数也将嵌套在另一个var声明中。

除此之外,似乎没有其他重大差异。

  

如果我错过任何事情,请添加!

相关问题