Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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:声明函数的最佳实用方法_Javascript_Jquery - Fatal编程技术网

Javascript:声明函数的最佳实用方法

Javascript:声明函数的最佳实用方法,javascript,jquery,Javascript,Jquery,在过去的几个网站上,我主要使用jquery进行事件驱动,我通常也会这样做 function abc() { //do stuff } abc(); 及 我知道这不是最好的做法,但我仍在学习,而且似乎很管用。我只是想知道我现在应该如何处理这件事。阅读。这是一个非常好的Javascript风格指南 实际上,如果要在全局范围内定义所有这些函数(如全局对象窗口的属性/方法),那么示例(第一个)中的代码并不是最好的选择。我更喜欢使用模块模式 我建议你阅读上面链接中的整本书。另一件非常有用的事情—

在过去的几个网站上,我主要使用jquery进行事件驱动,我通常也会这样做

function abc() {
    //do stuff
}
abc();


我知道这不是最好的做法,但我仍在学习,而且似乎很管用。我只是想知道我现在应该如何处理这件事。

阅读。这是一个非常好的Javascript风格指南

实际上,如果要在全局范围内定义所有这些函数(如全局对象窗口的属性/方法),那么示例(第一个)中的代码并不是最好的选择。我更喜欢使用模块模式 我建议你阅读上面链接中的整本书。另一件非常有用的事情——斯托扬·斯特凡诺夫的JS模式书

示例的另一个备选方案(第二个)是自执行函数:

(function () {
   //attaching events and doing all other stuff
}());

自动执行函数帮助您在首次加载页面时执行一些初始化工作。您可以附加事件或/和执行其他您应该执行一次的操作。它可以防止您污染全局范围并多次执行init。

我通常会选择这样的方式。将整个代码包装在一个闭包中,并在将所有必需的方法和变量附加到一个名称空间对象之后返回该名称空间对象

var myApp = (function foo() {
    "use strict";
    var myApp = {

        a       : $('.aaa'),
        b       : $('.bbb'),
        c       : $('.ccc'),
        animal  : function () {
            //do stuff
        }
    };

    myApp.pet =  function () {
        //do stuff
    };

    return myApp;
}());


myApp.animal();

这是如此。。。错。很抱歉,您的问题是什么?您希望从这一行中得到什么?除了一个错误。还有:事件驱动?这里甚至没有任何东西表明你正在处理事件为什么你在函数中有函数?当然,如果你可以在一个函数中声明一个函数,那么这些语句肯定只能在一个函数中声明?那你的“;”呢sjavascript只是在没有它们的情况下抛出错误。@Christopherney闭包和ASI@EliasVanOotegem只是询问声明函数的最佳实践。我修正了其余部分,以给出一个更好的例子?@ChristopherKenney Closes,我刚刚找到了一个更好的方法来制作它们,尽管我仍然想知道最佳实践。使用这种方法而不是我使用的方法有什么优点或缺点吗?我看了一眼艾迪写的那本书,大部分的图案都在我的脑海中闪过,对于我需要完成的工作来说,似乎是矫枉过正。这是一种我应该花一些时间来处理的模式吗?假设函数在范围内不会执行多次,那么您的IILife确实更合适。否则,如果一个函数在另一个函数中,我看不出有任何错误,因为它无论如何都会被限定作用域。@delboud:当然这有好处:由匿名函数创建的作用域不能再被创建:闭包是绝对的。在您的示例中,没有任何东西阻止我执行
foo();foo()是的,没错。使用自执行函数对于附加事件和在第一页加载时执行初始化工作(仅一次)非常有用。@delboud:您可以有任意多个anon.func。看看您的平均jQuery脚本:
$('#id')。on('click',function(){/*anon F*/})到处都是。。。
var myApp = (function foo() {
    "use strict";
    var myApp = {

        a       : $('.aaa'),
        b       : $('.bbb'),
        c       : $('.ccc'),
        animal  : function () {
            //do stuff
        }
    };

    myApp.pet =  function () {
        //do stuff
    };

    return myApp;
}());


myApp.animal();