在Javascript中,我已经看到了三种不同的方式来定义函数。JavaScript函数声明风格
- 传统风格:
function foo() { //do something }
- 新的js忍者风格
var foo = function(){ //do something }
- DOM特定样式
window.foo = function(){ //do something }
是什么问题,
是什么上述三者的区别?为什么我应该使用哪一个&?
在Javascript中,我已经看到了三种不同的方式来定义函数。JavaScript函数声明风格
function foo() { //do something }
var foo = function(){ //do something }
window.foo = function(){ //do something }
是什么问题,
是什么上述三者的区别?为什么我应该使用哪一个&?
第一个是函数声明。它被悬挂起来(你可以在当前范围内的任何地方使用它)。
第二个是使用匿名函数的变量定义。变量悬挂,任务保持原位。该功能可能无法使用,直到您分配它的行。
第三个是分配一个全局方法。与第二个类似,虽然与全局对象一起工作,但这并不好。
然而,你能想到的第四种方法(称为函数表达式):
var foo = function bar(){ //do something }
这里,酒吧将只提供内部本身,这是递归有用,而不是与它搅动目前的范围。
您正在根据您的需求选择任何方法。我只会投票反对第二种方法,因为它使函数的行为像一个变量。
只要您提到第二个和第三个选项,我想提醒一下,污染性的全局对象是considered bad practice。您最好考虑使用自动执行的匿名函数来创建单独的范围,例如
(function(){
var t = 42; // window.t still does not exist after that
})();
我想你可能会发现在JavaScript Scoping and Hoisting有用的更详细的文章。
它的“悬挂”是什么意思?此外,我声明使用2nd Approch有什么不利之处。因为从我对JavaScript的理解有限,一切都是一个对象 - 变量,函数。 – CuriousMind
你可以参考我提到的文章了解更多细节。简而言之,所有变量和函数声明都在内部被提升(提升)到当前范围的开始。首先是函数,然后是变量。作业留在原地。 – Li0liQ
优秀的文章+文章是伟大的。 –
首先,请参阅Javascript: var functionName = function() {} vs function functionName() {}。
然后我们找到var foo =
和window.foo =
之间的差异。
第一个是一个局部范围的变量,它非常可爱(除非它在全局范围内完成)。其次是一个明确的全局,它具有全局的所有常见问题(例如与其他代码冲突的可能性)。
如果我想声明一个全局函数 - 这两个没有什么区别? – CuriousMind
通常你应该避免在全球范围内做任何事.. @ Gaurish。 –
可能重复[Javascript:var functionName = function(){} vs function functionName(){}](http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function- functionname)。 –
也var foo =功能foo(){//做点什么} –