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

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

兩種方式是:

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

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


当前回答

a = 10
output : 10

(1 + 3)
output = 4

声明/声明:不返回值的东西 示例:

if (1 > 2) {
 // do something. 
}

此分類上一篇

同样,我们有函数声明/声明 vs 函数表达 请举一个例子:

// test.js

var a = 10;

// function expression
var fun_expression = function() {
   console.log("Running function Expression");
}

// funciton expression

function fun_declaration() {
   console.log("Running function Statement");
}

重要:在JavaScript引擎运行上面的JS文件时会发生什么。

现在,假设我们更新JS到。

// test.js

console.log(a)  //output: udefined (No error)
console.log(fun_expression)  // output: undefined (No error)
console.log(fun_expression()) // output: Error. As we trying to invoke undefined. 
console.log(fun_declaration()) // output: running function statement  (As fun_declaration is already hoisted in the memory). 

var a = 10;

// function expression
var fun_expression = function() {
   console.log('Running function expression')
}

// function declaration

function fun_declaration() {
   console.log('running function declaration')
}

console.log(a)   // output: 10
console.log(fun_expression()) //output: Running function expression
console.log(fun_declaration()) //output: running function declaration

在评论中提到的结果,应该有助于理解函数表达与函数声明/声明之间的区别。

其他回答

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

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

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

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

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

二是定义函数的不同方式,区别在于浏览器如何解释并将其加载到执行背景中。

第一個案例是函數表達,只有當翻譯者達到這個代碼線時才會充電,因此,如果你這樣做,你會發現函數一不是函數的錯誤。

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

原因在于,在第一行中,没有值被分配到函数One,因此它是不定义的,我们试图称之为函数,因此我们得到一个错误。

在第二行中,我们将匿名函数的参考归分为函数One。

第二个案例是功能声明,在任何代码执行之前加载,所以如果你喜欢下一个,你不会得到任何错误,因为声明加载,在代码执行之前。

functionOne();
function functionOne() {
   // Some code
}

1、功能表达

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

函数表达式定义一个函数作为一个更大的表达式合成的一部分(通常是一个变量任务)。函数表达式通过函数表达式定义的函数可以被命名或匿名。

二、职能宣言

function functionTwo() {
    // Some code
}

这是在JavaScript中召唤函数的正常方式,这个函数可以被召唤之前你甚至宣布它,因为在JavaScript中,所有函数都被收集,但如果你有“严格使用”这个函数不会像预期那样收集,这是一个很好的方式召唤所有正常函数,这些函数不大,也不是一个构建函数。

此外,如果您需要更多关于如何在JavaScript中工作的信息,请参阅下面的链接:

第一個(函數 doSomething(x))應該是對象評分的一部分。

你可能想知道什么是函数声明和函数表达式。

function foo() {
    return 3;
}

ECMA 5(13.0)定义合成为函数识别器(FormalParameterListopt ) { FunctionBody }

在上述情况下,函数名称在其范围内和其父母范围内可见(否则它将是不可访问的)。

在函数表达中

函数表达式定义函数作为一个更大的表达式合成的一部分(通常是一个变量任务)。函数表达式可以命名或匿名。

// Anonymous function expression
var a = function() {
    return 3;
}

// Named function expression
var a = function foo() {
    return 3;
}

// Self-invoking function expression
(function foo() {
    alert("hello!");
})();

ECMA 5 (13.0) 定义合成为函数 Identifieropt ( FormalParameterListopt ) { FunctionBody }

格雷格的答案足够好,但我仍然想添加一些我刚才学会了观看杜格拉斯·克罗克福德的视频。

功能表达:

var foo = function foo() {};

功能声明:

function foo() {};

函数声明仅仅是函数值的每个声明的短片。

因此

function foo() {};

扩展到

var foo = function foo() {};

它进一步扩展到:

var foo = undefined;
foo = function foo() {};

两者都被推到代码的顶部。

此分類上一篇