我最近开始保持别人的JavaScript代码,我正在修复错误,添加功能,也试图更新代码并使其更加一致。
以前的开发人员使用了两种方式来宣布功能,我无法解决是否有原因。
兩種方式是:
var functionOne = function() {
// Some code
};
function functionTwo() {
// Some code
}
使用这两种不同的方法的原因是什么?每个方法的优点和缺点是什么?可以用一种方法做些什么,不能用另一种方法做些什么?
在JavaScript中,有两种方式可以创建功能:
函数声明:函数 fn(){ console.log(“Hello”); } fn(); 这是非常基本的,自我解释,用在许多语言和标准在C家庭的语言. 我们声明了一个函数定义它,并通过呼叫它执行它. 你应该知道的是,函数实际上是对象在JavaScript; 内部我们创造了一个对象上面的函数,并给它一个名字 cal
参考: JavaScript 函数声明合成: var fn = function() {} vs function fn() {}
一个函数声明和一个函数表达,在一个变量行为被定义后,相同。
基本上,所有函数声明和变量声明都被插入到声明发生函数的顶部(这就是为什么我们说JavaScript具有函数范围)。
当一个函数声明被拍摄时,函数体“跟随”,因此当函数体被评估时,变量将立即与函数对象联系起来。当一个变量声明被拍摄时,启动不会跟随,而是“左后面”。变量在函数体的开始时被启动到未定义,并将在其原始位置分配一个值。
一些例子......
var foo = 1;
function bar() {
if (!foo) {
var foo = 10 }
return foo; }
bar() // 10
function f() {
return a;
function a() {return 1};
var a = 4;
function a() {return 2}}
f()() // 2
function f() {
return a;
var a = 4;
function a() {return 1};
function a() {return 2}}
f()() // 2
函数声明优先于变量声明,最后的函数声明“粘贴”。
function f() {
var a = 4;
function a() {return 1};
function a() {return 2};
return a; }
f() // 4
在此例子中, a 与第二个函数声明的评估结果的函数对象开始,然后分配为 4.
var a = 1;
function b() {
a = 10;
return;
function a() {}}
b();
a // 1
兩個函數之間的另一個區別是函數One 可以用作可持有多個函數的變量,而函數Two 持有某些代碼區塊,在呼叫時全部執行。
var functionOne = (function() {
return {
sayHello: function(){
console.log('say hello')
},
redirectPage:function(_url){
window.location.href = _url;
}
}
})();
您有一个选项,该函数将被称为. e.g 函数One.sayHello 或函数One. redirectPage. 如果您呼叫函数Two 那么整个代码块将被执行。
要注意的一个重要点是:
让我们有两个功能:
sum(1,2);
const sum = function(first, second) {
return first + second;
}
在上述情況下,它會導致錯誤,金額不被定義,但
sum(1,2);
function sum(first, second) {
return first + second;
}
此函数不会有任何错误,因为在这种情况下会发生 Hoisting。