我最近开始保持别人的JavaScript代码,我正在修复错误,添加功能,也试图更新代码并使其更加一致。
以前的开发人员使用了两种方式来宣布功能,我无法解决是否有原因。
兩種方式是:
var functionOne = function() {
// Some code
};
function functionTwo() {
// Some code
}
使用这两种不同的方法的原因是什么?每个方法的优点和缺点是什么?可以用一种方法做些什么,不能用另一种方法做些什么?
名称功能 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!');
对于一个变量的函数,这个函数的名称,在这种情况下,不太常见,可能会导致混乱,在这种情况下,箭头函数可能是一个更好的选择。
区别在于,函数One 是一种函数表达式,因此只有在到达该行时才定义,而函数Two 是一种函数声明,并在其周围函数或脚本执行后才定义。
例如,函数表达式:
// TypeError: functionOne 不是函数函数One(); var 函数One = 函数() { console.log(“Hello!”); };
还有一个功能声明:
// 输出: “Hello!”函数Two();函数函数Two() { console.log(“Hello!”); }
“使用严格”; { // 注意此区块! 函数三() { console.log(“Hello!”); } } 函数三(); // 参考错误
在JavaScript中,有两种方式可以创建功能:
函数声明:函数 fn(){ console.log(“Hello”); } fn(); 这是非常基本的,自我解释,用在许多语言和标准在C家庭的语言. 我们声明了一个函数定义它,并通过呼叫它执行它. 你应该知道的是,函数实际上是对象在JavaScript; 内部我们创造了一个对象上面的函数,并给它一个名字 cal
参考: JavaScript 函数声明合成: var fn = function() {} vs function fn() {}
函数One = 函数() {} 定义在运行时间,函数Two() {} 定义在部分时间。
// Run-Time function declaration
functionOne(); // Calling functionOne function here will give an Error
var functionOne = function () {
// Some code
};
// Parse-Time function declaration
functionTwo(); // Calling functionTwo function will not give an Error
function functionTwo() {
// Some code...
}
此分類上一篇: Run-time vs Parse-time javascript run-time vs parse-time