我为什么要这样做:
var myfunc = function() { /* code */ };
...
myfunc();
而不是这个:
function myfunc() { /* code */ }
...
myfunc();
使用其中一个有什么好处吗?我在不同的地方看到了这两个例子。
我为什么要这样做:
var myfunc = function() { /* code */ };
...
myfunc();
而不是这个:
function myfunc() { /* code */ }
...
myfunc();
使用其中一个有什么好处吗?我在不同的地方看到了这两个例子。
据我所知,唯一的区别是匿名函数不能递归调用自己,而命名函数可以。第三种结构结合了这两种结构,即你可以有一个命名函数表达式:
var myfunc = function myfunc() { /* code */ };
如果函数被正常声明,即使重新声明了标识符,函数名(它的标识符)也不会被删除。标识符仅在其范围结束时才会被删除。
function myfunc() { /* code */ };
if (delete myfunc) { //will fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
myfunc = null;
if (delete myfunc) { //will still fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
var myfunc = null;
if (delete myfunc) { //will still fail
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
但是如果将函数声明分配给变量,则可以删除其标识符。当您需要创建一个全局函数但只是临时使用它时,这尤其有用,以便在不再需要它时可以将其删除,或者避免标识符与第三方脚本的可能冲突。
var myfunc = function() { /* code */ };
if (delete myfunc) { //will succeed
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
//or...
var myfunc = function myrealfunc() { /* code */ };
if (delete myfunc) { //will succeed
alert('myfunc deleted');
} else {
alert('can not delete myfunc');
}
有一些差异,主要是务实的。当你“var”一个函数时,通常的假设是某种“本地”范围的函数(想想嵌套函数)。当您这样做时 function myFunction() {}
,该函数通常被假定为全局范围的(尽管您也可以将其包装在匿名函数中)。
在 javascript 'class' 的情况下,如果你想创建一个本地范围的函数,你必须使用 'var' 来声明它。
var myClass = function() {
var test = function() {
//This function has local scope
}
};
除了上面的注释,这是一个简单的例子。
var myVariable = resultFunction();
function resultFunction() {
return 1;
}
上面的代码将起作用。但是您不能执行以下操作
var myVariable = resultFunction();
var resultFunction = function() {
return 1;
};
但你可以做
var resultFunction = function() {
return 1;
};
var myVariable = resultFunction();