我正在查看this非常酷的片段,我在js中遇到了这个奇怪的行 并删除,以防止调用该功能
!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
...
}(document, window);
,我将函数与()按原样包装,并按预期工作。
(function(d, w){
...
})(document, window);
所以我的问题是什么是奇怪的线,为什么它有效?我狂野的客人是它是某种IIFE ...
答案 0 :(得分:11)
你是对的,它是Immediately-Invoked Function Expression (IIFE)
你可以改写
!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!+-+-+!
function(d, w){
...
}(document, window);
到
!function() {
...
}()
它仍然有效。这是因为!
是一元运算符(就像+
,-
和~
- 请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators)。
在一元运算符之后,预期表达式(并进行评估!)。表达式可以是函数调用。
然而
!function() {
...
}()
只是另一个表达式,因此您可以在其前面放置另一个一元运算符:
+!function() {
...
}()
您可以根据需要继续使用此模式。
注意:以这种方式调用匿名函数,忽略函数的返回值。因此,如果您对返回值不感兴趣,请仅使用此项。
修改:添加了对Daff在答案中提到的http://benalman.com/news/2010/11/immediately-invoked-function-expression/的精彩参考。
答案 1 :(得分:4)
诀窍实际上是那里的单!
运算符(整个第一行实际上做同样的事情)。这也可行:
!function(d, w){
...
}(document, window);
上推荐Ben Almans的精彩文章