JavaScript的新手,但我知道该表格
<script>(function(){ somecode })();</script>
在解释时会立即运行某些代码。但是当我阅读html5游戏源代码时,我遇到了一些形式如下的代码:
<script>(function(){})</script>
没有括号,这是什么意思?
源代码:https://github.com/oxyflour/STGame 并且index.html的代码形式如下:
<script>(function(){})</script>
答案 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,没有最后的括号(在末尾为()
),这意味着在定义后将不会立即调用它。
因此,此代码的目的可能是为了保留以后使用,或者是写代码的人忘记了调用它的方法或类似的方法。这不是我所见过的任何地方实际使用的模式。