我有一个没有括号的匿名函数,这是怎么工作的?

时间:2019-07-19 09:58:06

标签: javascript anonymous-function

JavaScript的新手,但我知道该表格

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

在解释时会立即运行某些代码。但是当我阅读html5游戏源代码时,我遇到了一些形式如下的代码:

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

没有括号,这是什么意思?

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

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

3 个答案:

答案 0 :(得分:3)

请参阅game.js文件,他们将其用作不执行任何操作的节点(@Shilly),并使用script标记中的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>

答案 1 :(得分:1)

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

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

因此,它获取<script/>标记的innerHTML并通过eval()执行。

答案 2 :(得分:0)

据我所知,这没有任何作用。它只求值并返回,因此没有调用或任何东西。

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

因此,此代码的目的可能是为了保留以后使用,或者是写代码的人忘记了调用它的方法或类似的方法。这不是我所见过的任何地方实际使用的模式。