为什么这个Javascript行只包含函数名和函数调用?

时间:2013-09-23 09:43:59

标签: javascript jquery twitter-bootstrap

我正在阅读Twitter Bootstrap Tabs Plugin的源代码,并且有一条似乎是简短的东西,但我不明白它是什么。这是源代码片段(版本3.0.0):

Tab.prototype.activate = function (element, container, callback) {
var $active    = container.find('> .active')
var transition = callback
  && $.support.transition
  && $active.hasClass('fade')

function next() {
  $active
    .removeClass('active')
    .find('> .dropdown-menu > .active')
    .removeClass('active')

  // some code removed for conciseness

  callback && callback()
}

有问题的一行是:callback && callback()

我从未见过像这样输入的函数或变量名,然后在&&运算符之后调用函数。

我猜这是短手的。它是什么,它意味着什么?它是如何工作的?

5 个答案:

答案 0 :(得分:4)

这是

的简写
if (callback)
{
   callback();
}

基本上如果第一部分为null(或未定义),它们都等于false,则&& (逻辑和)失败,它什么也没做。

如果定义了回调,则&&和&是的,所以它评估第二部分(在这种情况下调用方法)。

这被称为短路,作为逻辑AND运算符左侧的初始false,意味着它不会尝试评估右侧表达式的第二部分(因为它已经失败了测试“一切都是真的”)。注意:并非所有语言都在逻辑AND表达式中实现短路(VB不是来自内存),但javascript是明智之一! :)

对于那些关心undefined vs null vs 0检查的细节的人:

http://www.sitepoint.com/javascript-truthy-falsy/

*免责声明:代码示例有意简单,由经过培训的特技编码员执行。请不要在家里尝试这个。这很危险,可能会导致投票结果:)

答案 1 :(得分:2)

&&运算符的工作原理如下:

a && b
  1. 评估
  2. 如果a是假的,请返回
  3. 返回Evaluate b
  4. 的结果

    所以,你提到的那句话就相当于:

    如果回调的值是真的,请将回调作为函数调用

    如果您将回调提供为非零数字,非空字符串或对象,则可以轻松地提取此代码,但如果您提供函数或不提供任何内容(这是代码作者所期望的那样),那么它将起作用正确,只有在提供回调时才调用回调。

    修改

    Truthy / Falsy简短地解释道:

    • 虚假值:undefined,null,false,0,'',NaN
    • Truthy价值观:其他一切

    更长的解释:http://www.sitepoint.com/javascript-truthy-falsy/

答案 2 :(得分:1)

它将检查callback是否存在,如果存在,那么它将运行它。原因是&&运算符在第一个参数为false的情况下会短路。因此,如果callback不存在,则不会检查后半部分

答案 3 :(得分:1)

它与:

相同
if (typeof callback != "undefined"){
    callback();
}

答案 4 :(得分:0)

  
      
  • 所有对象都被认为是真实的。
  •   
  • 如果字符串为空,则视为字符错误。
  •   
  • null和undefined被认为是假的。
  •   
  • 如果数字为零,则数字为false。
  •   

http://msdn.microsoft.com/en-us/library/ie/719e8e30%28v=vs.94%29.aspx

并且在逻辑&&如果第一个是假的那么整个陈述。因此,如果没有回调(假),那么&&的下一部分将不会执行(调用callback()函数)!