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

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

兩種方式是:

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

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


当前回答

在计算机科学的意义上,我们谈论匿名函数和名称函数,我认为最重要的区别是匿名函数与名称无关,因此名称匿名函数。

有关匿名功能和Lambda calculus的更多信息,维基百科是一个很好的开始:匿名功能。

其他回答

关于表演:

新版本的V8引入了几个未来的优化,所以SpiderMonkey。

现在表达与声明之间几乎没有区别,功能表达似乎现在更快。

浏览器 62.0.3202

福克斯55

Chrome 加拿大 63.0.3225

此分類上一篇

匿名函数表达式似乎比名函数表达式表现更好。

此分類上一篇

此分類上一篇: Firefox Chrome Canary Chrome

一个重要原因是添加一个和只有一个变量作为你的名称空间的“根”。

var MyNamespace = {}
MyNamespace.foo= function() {

}

var MyNamespace = {
  foo: function() {
  },
  ...
}

有很多技术来搜索名称,它变得更加重要,有许多可用的JavaScript模块。

此分類上一篇: 如何在JavaScript中宣告名稱空間?

名称功能 vs. 匿名功能

第一函数合成是匿名函数表达式:

var functionOne = function() {
  // do something...
};

但是,第二个是功能宣言:

function functionTwo () {
  // do something...
}

兩者之間的主要區別是函數名稱,因為匿名函數沒有呼叫的名稱. 匿名函數是快速且容易宣告的,許多圖書館和工具往往鼓勵這種愚蠢的代碼風格. 然而,匿名函數有一些缺點:

可读性:匿名函数忽略了一个名称,可能会导致更少可读的代码。 解密: 匿名函数没有名称,可以使解密更困难。

名称函数表达式

為您的功能表達提供一個名稱,非常有效地解決所有這些缺點,並且沒有實際的缺點。

setTimeout(function timeHandler() { // <-- look, a name here!
  console.log("I've waited 1 second");
}, 1000);

名称 IIFEs(即时启发功能表达)

(function IIFE(str) { // <-- look, always name IIFEs!
  console.log(str); // "Hello!"
})('Hello!');

对于一个变量的函数,这个函数的名称,在这种情况下,不太常见,可能会导致混乱,在这种情况下,箭头函数可能是一个更好的选择。

新函数()可以用来将函数的身体转移到一条线上,因此可以用来创建动态函数,也可以通过脚本而不执行脚本。

var func = new Function("x", "y", "return x*y;");
function secondFunction(){
   var result;
   result = func(10,20);
   console.log ( result );
}

secondFunction()

var add = undefined; try { console.log(“成功:”,添加(1, 1)); } catch(e) { console.log(“错误:” + e); } add = function(a, b){ return a + b; }

尝试 { console.log(“成功:”,添加(1, 1)); } catch(e) { console.log(“错误:” + e); } var add=function add(a, b){ return a + b; }

名称(名称)

函数函数的名称 thefuncname(){} 是函数名称,当它以这种方式宣布时。

var a = 函数 foobar(){}; console.log(a.name);

变量可变性

什么是“最接近的区块”

正常是 add=function(){}

正常功能添加({})

功能

Arrow 函数与 var add=函数()

Arrow 函数 与函数添加()