[英]Why would you assign a function to a variable instead of declaring a named function?
我为什么要这样做:
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');
}
有一些差异,大多数是实用的。 当您“变”一个函数时,通常的假设是某种“局部”范围的函数(以嵌套函数为例)。 当您执行function myFunction() {}
,通常假定该函数是全局范围的(尽管您也可以将其包装在匿名函数中)。
对于javascript“类”,如果要创建本地范围内的函数,则必须使用“ 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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.