关于JavaScript函数unorthodoxy

Hex*_*ory 5 javascript function dynamic

我已经为网络编程已经很长一段时间了,但是最近才发现了一些关于函数使用的新复杂性以及你可以用它们做的奇怪的事情(或者我认为它们都是如此).但是,它们在这一点上似乎只是语法上很漂亮的东西.我希望有人可以告诉我这些新发现的方面如何证明是有用的.

例如,我第一次运行它时,我认为它不会起作用:

<script>
function x(q)
 {
q(x);
 }

x(function(a)
 {
alert(a);
 }
 );
</script>
Run Code Online (Sandbox Code Playgroud)

但它确实做到了!不知何故,创建一个命名函数,它接收一个不同的匿名函数作为它的唯一参数,然后运行传递给它的函数,并将其作为参数传递给它就可以了.这让我大吃一惊,我几乎可以肯定它有很大的实用性,但我还是不能完全放下它.

啊,还有另外一件事我很高兴发现:使用全局范围的变量来存储函数,可以在执行后使用JavaScript的eval()函数来修改该变量,从而动态地改变函数的内部工作.一个例子:

<script>
var f = function()
 {
alert('old text');
 }

eval('f = ' + f.toString().replace('old text', 'new text'));

f();
</script>
Run Code Online (Sandbox Code Playgroud)

果然,该代码警告"新文本"字符串; 当我看到这一点时,我的思绪再一次被吹嘘,但也立即对创造出令人难以置信的东西的潜力感兴趣.

所以...我对Stack Overflow的问题:如何以任何积极的方式使用这些看似抽象的编码原则?

Kev*_*vin 5

您基本上要问的是如何将函数用作一等对象?

最大和最常见的用法是用于事件处理的闭包(或匿名函数).但是,仅仅因为你可以聪明,这并不意味着你应该.编写清晰易读的代码,就像使用任何其他语言一样.

哦,为了输入eval而鞭打自己,从不考虑再做一次