Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jQuery函数内部公开函数_Javascript_Jquery - Fatal编程技术网

Javascript 从jQuery函数内部公开函数

Javascript 从jQuery函数内部公开函数,javascript,jquery,Javascript,Jquery,我有一块JavaScript/jQuery可以正常工作 <script type="text/javascript"> $(function () { function doSomething() { // Do something amazing here! } // Many various jQuery handlers and support functions }); </s

我有一块JavaScript/jQuery可以正常工作

<script type="text/javascript">
    $(function () {
         function doSomething() {
             // Do something amazing here!
         }
        // Many various jQuery handlers and support functions
    });
</script>

$(函数(){
函数doSomething(){
//在这里做一些令人惊奇的事情!
}
//许多不同的jQuery处理程序和支持函数
});
但是现在我希望我的
doSomething()
函数可以从同一页面上的另一个脚本块调用

我知道我可以通过将
doSomething()
移动到jQuery函数之外(
$(函数(){})
)来实现这一点。但是
doSomething()
将无法调用jQuery函数内部的helper函数

我可以将其他函数移到jQuery函数之外,但其中一些函数是需要初始化的处理程序,它们共享相同的助手函数

有没有一种方法可以将我的所有函数都保存在jQuery函数内,但只在jQuery函数外显示其中一个函数


还有关于我可以去哪里阅读这篇文章的建议吗?

好吧,事实上你应该把你的逻辑从这个包装上移开

它用于初始化应该在DOM就绪后运行的逻辑。你不应该在这里做任何事情

考虑以下代码模式:

(function($) {
  // Your logic here
  // You could safely export your functions to
  // global scope from here, if you really need
  var app;

  app = {
    forms: doSomething
  };

  function doSomething() {
    // Do something amazing here!
  }

  window.app = app; 

  $(function() {/* start interact with DOM */});
}(jQuery));

您可以通过扩展jQuery来实现这一点:

$.extend({
    foo: new function () {
        var _self = this;            

        _self.doSomething = function () {

        };   

        _self.initialize = function () {
            $('#button-x').click(function(){
                _self.doSomething(); //use the function inside
            }); 
        }; 
});

$(function () {
    $.foo.initialize();
    $.foo.doSomething(); //use the function outside
});

JavaScript具有功能范围。因此,如果函数嵌套在

$(function () { ... });
是因为它只能在该函数的范围内访问

您可以轻松地移动该函数定义:

$(function(){…})
函数之外,仍然可以访问
$(function(){…})
函数范围内的变量,方法是将变量作为参数传递给函数,然后让它返回任何修改:

    $(function () {
         var blah = 'blah';
         var result;
         result = doSomething(blah);
         // Many various jQuery handlers and support functions
     });
     function doSomething(blah) {
         // Do something amazing here!
         return newBlah;
     }
     // Now you can call your doSomething function in the global scope too
     var example = "test";
     var result = doSomething(example);

“我希望我的…函数可以从同一页上的另一个脚本块调用”。为什么要这样做?@AlexW:因为这是一个庞大的WebForms项目,包含数百个组件,其中一些组件需要在客户端与其他组件进行交互。为什么要在
$(function(){…})中定义任何函数?我看不出你为什么要这么做。我会把它们都放在外面Johnatha我会建议你花时间学习RequireJS,它将帮助您将模块化引入代码,并对代码进行一些其他改进project@LeshaOgonkov:谢谢,但在开始使用新技术之前,我对学习JavaScript和jQuery更感兴趣。如果你还没有弄明白,我的背景是JavaScript以外的语言。所以你的第一个建议没有给我提供任何新的或有用的信息。是的,我可以考虑你建议的式样。但就目前而言,我不知道我为什么要这么做。事实上,我甚至不明白它是做什么的。我的第二句话是关于为什么应该这样做。简而言之:你不需要等待DOM,初始化你的逻辑代码,也许我可以这样重新构造它。我知道有很多方法可以让JavaScript更加面向对象,而这正是我所缺乏的知识。我希望能有更多类似的东西,但这也许是我目前任务的最佳答案。
    $(function () {
         var blah = 'blah';
         var result;
         result = doSomething(blah);
         // Many various jQuery handlers and support functions
     });
     function doSomething(blah) {
         // Do something amazing here!
         return newBlah;
     }
     // Now you can call your doSomething function in the global scope too
     var example = "test";
     var result = doSomething(example);