2012-01-23 72 views
1

Javascript:这行是什么意思?

!function ($) 
+6

没有,没有上下文。这不是一个独立的表达。让我们看看其余的! – Cameron

+0

你可以给出一些上下文,比如它来自哪个文件的链接,或者至少是上面和下面的几行? – Simon

+0

它看起来像一个不会返回值的自执行函数的开始。 – Havvy

回答

2

我认为我们错过了一些数据,但我打赌这篇文章是从一个条件语句或三元关系中得来的。

var test = 'Testing!'; 
(!function ($) { 
    alert($); 
    return false; 
}(test) ? alert("bad") : alert("good")); 

http://jsfiddle.net/MattLo/WpqfN/3/

+4

这不是封闭。 – Havvy

+1

@ Havvy:当然可以。所有函数都在JS中创建闭包。 – 2012-01-23 03:25:29

+0

Matt Lo:对于IIFE你当然是对的,但'''更有可能用来代替'()'来强制函数作为表达式的一部分进行评估。 [看到这个问题](http://stackoverflow.com/q/8611700/1106925)。所以函数的返回结果可能被忽略。 – 2012-01-23 03:27:01

6

我敢打赌一稍微更完整的版本是这样的:

!function ($) { 
    // some code 
}(jQuery); 

基本上上述使用!运营商有匿名函数被解释为一个可以立即调用的函数表达式。拿走!,你有一个无效的函数声明(或函数声明,取决于你的首选术语) - 无效,因为它没有名字。更常见的方式做,这是把它在括号:

(function ($) { 
    // some code 
})(jQuery); 

但有些人喜欢用!而不是括号来保存字符。

为什么你可能会使用这样的代码的一个原因是你可以创建一些工作变量,这些变量不会在全局范围内结束。或者,从匿名函数中,创建一个全局范围内的对象,但该对象具有访问匿名函数范围中的私有变量的方法。

关于$参数,我只是猜测jQuery将作为参数传递给函数,因为这在使用参数名称$时很常见。您可能会这样做的一个原因是,您可以使用另一个库,它在使用jQuery的同时定义$,但在此块中使用用于jQuery的$