我有一个没有括号的匿名函数,它是如何工作的?
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()
执行它。
新手 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()
执行它。