繁体   English   中英

JavaScript function 可以重命名吗?

[英]Can a JavaScript function rename itself?

我意识到 function 可以很容易地通过编写复制到一个新变量:

var wu = function() {
   // do stuff
)

var tang = wu;
var bee = tang;
// etc

通过这种方式,理论上可以使用无限多个名称 go。 我还意识到在上面的例子中,我可以说var wu = undefined并且引用将被删除,但我想知道 function 是否可以将自己重命名为它自己的上下文的一部分? 意思是,我可以写:

function wuTang() {
   // do stuff
   // rename self
}

wuTang(); // runs successfully
wuTang(); // returns undefined 

我不担心创建新名称的过程,我只是想知道这是否可能。 我不想调用第二个 function 来重命名原来的 function,我希望 function 重命名自己,这样它只能被给定的名称调用一次。

window.wutang = function() {
  var f = window.wutang;
  window.watang = f;
  delete window.wutang;
}

这足以“重命名”自身:)

wutang(); // ok
wutang(); // fail
watang(); // should kill self :)

是的,有可能。 要重命名 function,您需要为其添加一个新名称,然后删除其旧名称。 例子:

 function wuTang() {
        newWuTang = wuTang; // Add new name (reference) to the function
        wuTang = undefined; // Remove old name (reference)
 }

在这种情况下,请注意newWuTang前面没有关键字 (var,let,const,...) 是您想要的,因为根据 w3:

如果您声明一个变量,而不使用“var”,则该变量总是变为 GLOBAL。

这个 function 将只作为wuTang运行一次,并将自己重命名为newWuTang

我曾经在我的 function 中使用过一些类似eval的东西,所以我可以将新的通缉名称作为参数传递给 function。但是你知道他们对eval的看法......那天我一定感到很疯狂!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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