我一直在上 Codecademy JavaScript 课程,他们告诉我们使用这样的函数:
var functionName = function(parameters) {};
我以前做过一些 JavaScript,而且我总是这样做:
function myFunction(parameters){}
正确的方法是什么?有什么区别吗?我什么时候应该使用?
谢谢!
我一直在上 Codecademy JavaScript 课程,他们告诉我们使用这样的函数:
var functionName = function(parameters) {};
我以前做过一些 JavaScript,而且我总是这样做:
function myFunction(parameters){}
正确的方法是什么?有什么区别吗?我什么时候应该使用?
谢谢!
这取决于,通常对于正常功能,您将希望使用第二种方式:
function myFunction(parameters) {
}
如果需要,您可以使用第一种方式将函数分配给变量,也可以通过混合和匹配。
// Assign an anonymous function to functionName
var functionName = function (parameters) {
}
// Assign a pointer to myFunction to functionName
var functionName = myFunction
不过,它们做的事情略有不同,想象一个for
包含这些的循环,第一个循环每次迭代都会创建一个新函数,而第二个只会引用一个已经存在的函数。
for (var i = 0; i < 10; i++)
// Creates 10 functions
var functionName = function (parameters) {
}
// Uses an existing function
var functionName = myFunction
}
不过,这实际上取决于您在做什么,例如,您可以使用这样的内联函数,这非常好。
window.onload = function () {
};
不同之处在于您何时这样做:
functionName();
var functionName = function(parameters) {};
//you get error
functionName1();
function functionName1(parameters) {};
//you get no error
原因是javascript预解析代码。我建议使用第二种创建对象的方法。
我知道的一些差异。
function myFunction(parameters){}
上面的函数始终是可调用的,无论是在它位于代码中的位置之前还是之后。
var functionName = function(parameters) {};
这只有在代码运行后才可调用(即对象已被定义)。
所以你可以做这样的事情;
if(condition) {
var functionName = function(parameters) {};
}
if(functionName != undefined) { functionName(); }
您也可以将它们用作回调;
function anotherMethod(parameters, callbackFunction){
// Do things with parameters
callbackFunction(parameters);
}
var functionName = function(parameters) {};
anotherMethod(parameters, functionName);
此外,可能最重要的事情通常是后一种格式允许命名空间,而不是在全局空间中收集所有函数,这可能最终在使用多个大型库的大型项目中出现重复的函数名称。
var uniqueName1 = {
firstFunction: function(){},
secondFunction: function(){},
};
var uniqueName2 = {
firstFunction: function(){},
secondFunction: function(){},
};
uniqueName1.firstFunction();
uniqueName2.firstFunction();
两种方式都是正确的。性能可能会因检查性能而异。