我最近开始保持别人的JavaScript代码,我正在修复错误,添加功能,也试图更新代码并使其更加一致。

以前的开发人员使用了两种方式来宣布功能,我无法解决是否有原因。

兩種方式是:

var functionOne = function() {
    // Some code
};
function functionTwo() {
    // Some code
}

使用这两种不同的方法的原因是什么?每个方法的优点和缺点是什么?可以用一种方法做些什么,不能用另一种方法做些什么?


当前回答

函数表达与函数表达的区别:

然而,在变量中存储函数(函数表达)并不是创建函数的唯一方式,也可以通过函数声明进行。

函数表达式可以是匿名的,而函数声明必须有一个名称. 两者都有一个名称属性,用于识别函数. 函数表达式的名称属性是它所属的变量的名称,而函数声明的名称只是给出的名称。

下面是一个例子:

答:

其他回答

当原始忍者物体被移除时,测试失败(第13页)

function assert(predicate, message) { if(!predicate) { throw new Error(message); } } var ninja = { yell: function(n){ return n > 0 ? ninja.yell(n-1) + "a" : "hiy"; } }; assert( ninja.yell(4) == "hiyaaaa", "A single object isn't too bad, either." ); var samurai = { yell: ninja.yell }; var ninja = null; try { samurai.yell(4); } catch(e){ assert( false, "Uh, this isn't good! Where'd ninja.yell go?" ); }

function assert(predicate, message) { if(!predicate) { throw new Error(message); } } var ninja = { yell: function yell(n){ return n > 0 ? yell(n-1) + "a" : "hiy"; } }; assert( ninja.yell(4) == "hiyaaaa", "Works as we would expect it to!" ); var samurai = { yell: ninja.yell }; var ninja = {}; assert( samurai.yell(4) == "hiyaaaa", "The method correctly calls itself." ); console.log(samurai.yell(4));

在代码维护成本方面,所谓的功能更受欢迎:

无论它们在哪里被宣布(但仍然受到范围限制)。 更抵抗错误,如条件启动(你仍然可以过度排序,如果你愿意)。 代码变得更可读,通过分配地方功能分开的范围功能。 通常在范围内,功能先行,其次是局部功能的声明。

我怀疑更多关于名称功能的PROS正在追踪,而被列为名称功能的优势是匿名功能的缺点。

历史上,匿名函数出现,因为JavaScript作为语言无法列出名为函数的会员:

{
    member:function() { /* How do I make "this.member" a named function? */
    }
}

我用我的代码中的变量方法出于一个非常具体的原因,其理论已经以抽象的方式被覆盖,但一个例子可以帮助一些像我这样的人,有有限的JavaScript专业知识。

有些品牌需要特定的功能,而有些则不。有时我需要添加新的功能来做新的品牌特定的事情.我很高兴更改共享编码,但我不想需要更改所有160套品牌文件。

使用变量合成,我可以在共享代码中宣言变量(基本上是函数指标),并分配一个三位一体函数,或设置为零。

其他评论家已经覆盖了上述两种变量的种子差异,我想注意一个风格差异:只有“分配”变量才能设置另一个对象的属性。

我经常用这样的模式创建JavaScript模块:

(function(){
    var exports = {};

    function privateUtil() {
            ...
    }

    exports.publicUtil = function() {
            ...
    };

    return exports;
})();

使用此模式,您的公共功能将使用任务,而您的私人功能则使用声明。

(请注意,任务应在声明后需要半分,而声明则禁止。

第一個例子是一個功能宣言:

function abc(){}

第二个例子是函数表达:

var abc = function() {};

在第一個例子中,整個函數宣言都被封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封封。

把它简单地说:

//this will work
abc(param);
function abc(){}

//this would fail
abc(param);
var abc = function() {}

要了解更多关于这个主题,我强烈推荐这个链接。