繁体   English   中英

为什么要为变量分配一个函数而不是声明一个命名函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM