我有一个没有括号的匿名函数,它是如何工作的?

I have an anonymous function without parentheses, how does this work?

新手 javascript,但我知道那种形式

<script>(function(){ somecode })();</script> 

当我阅读html5游戏源代码时interpreted.But会立即运行一些代码,我遇到了一些这样的代码:

<script>(function(){})</script>

没有括号attached.So什么意思?

源代码:https://github.com/oxyflour/STGame index.html 的代码形式如下:

<script>(function(){})</script>

据我所知,这没有任何作用。它只评估 returns,所以没有调用或任何东西。

(function(){})() 称为 IIFE - 立即调用的函数表达式)。然而,这是一个没有最后一个括号(() 在末尾)的 IIFE,这意味着它不会在定义后立即被调用。

因此,这段代码的目的可能是保留以备后用,也可能是编写它的人忘记调用它或类似的东西。这不是我见过的任何地方实际使用的模式。

引用 game.js 文件,他们将其用作不执行任何操作的节点(@Shilly)并使用脚本标记中的 id 访问它们。我不知道 d 对象做了什么,但它肯定在某处被调用,看看他们是如何使用 innerHTML

else if (v.tagName == 'SCRIPT' && $attr(v, 'type') == 'text/html') {
  d[v.id] = v.innerHTML;
} else if (v.tagName == 'SCRIPT') {
  d[v.id] = eval(v.innerHTML)(_t);
}

正在做的事情的一个例子:

eval(document.getElementById('myscript').innerHTML)('test');
<script id="myscript">
(function(a) {
  a ? console.log(a) : console.log('some string')
})
</script>

game.js source中我快速扫描后发现了这段代码:

// ... line 702
else if (v.tagName == 'SCRIPT') {
  d[v.id] = eval(v.innerHTML)(_t);
}
// ...

所以它获取 <script/> 标签的 innerHTML 并通过 eval() 执行它。