Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript的适当函数约定_Javascript - Fatal编程技术网

JavaScript的适当函数约定

JavaScript的适当函数约定,javascript,Javascript,我一直在学习Codecademy JavaScript课程,他们告诉我们使用如下函数: var functionName = function(parameters) {}; function myFunction(parameters){} 我以前做过一些JavaScript,我总是这样做: var functionName = function(parameters) {}; function myFunction(parameters){} 正确的方法是什么?有什么区别吗?我应该在

我一直在学习Codecademy JavaScript课程,他们告诉我们使用如下函数:

var functionName = function(parameters) {};
function myFunction(parameters){}
我以前做过一些JavaScript,我总是这样做:

var functionName = function(parameters) {};
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 (var i = 0; i < 10; i++)
    // Creates 10 functions
    var functionName = function (parameters) {
    }

    // Uses an existing function
    var functionName = myFunction
}

我意识到了一些差异

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();

不同之处在于,当您执行以下操作时:

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


functionName1();
function functionName1(parameters) {};
//you get no error
原因是javascript预解析代码。
我建议使用第二种创建对象的方法。

这两种方法都是正确的。性能可能会有所不同。

有关差异的另一详细解释,请参见此: