0

我一直在上 Codecademy JavaScript 课程,他们告诉我们使用这样的函数:

var functionName = function(parameters) {};

我以前做过一些 JavaScript,而且我总是这样做:

function myFunction(parameters){}

正确的方法是什么?有什么区别吗?我什么时候应该使用?

谢谢!

4

4 回答 4

1

这取决于,通常对于正常功能,您将希望使用第二种方式:

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 () {
};
于 2013-04-05T08:25:00.717 回答
0

不同之处在于您何时这样做:

functionName();
var functionName = function(parameters) {};
//you get error


functionName1();
function functionName1(parameters) {};
//you get no error

原因是javascript预解析代码。我建议使用第二种创建对象的方法。

于 2013-04-05T08:47:41.487 回答
0

我知道的一些差异。

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();
于 2013-04-05T08:36:34.850 回答
0

两种方式都是正确的。性能可能会因检查性能而异。

于 2013-04-05T08:59:25.533 回答