Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么这个Javascript行只包含函数名和函数调用?

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

Stack Overflow用户
提问于 2013-09-23 01:43:58
回答 5查看 92关注 0票数 0

我正在阅读插件的源代码,其中有一行看起来很短,但我不明白它是什么。下面是来自源代码的片段(版本3.0.0):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-23 01:45:11

是简写的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (callback)
{
   callback();
}

基本上,如果第一部分是null (或未定义的),两者都等同于false,则&& (逻辑和)失败,而它什么也不做。

如果定义了回调,则&&的第一部分为true,因此它计算第二部分(在本例中是调用方法)。

这就是所谓的短路,在逻辑和运算符的左侧,这意味着它不试图在右边计算表达式的第二部分(因为它已经通过了“一切都是真”的测试)。注意:并非所有语言都在逻辑和表达式中实现短路(VB不是从内存中实现的),但javascript是其中一种明智的语言!:)

对于那些关心未定义的vs null vs 0检查的更精细点的人:

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

*免责声明:代码示例故意简单,由训练有素的特技编码人员执行。请不要在家里尝试这样做。这是危险的,可能导致选票下降:)

票数 4
EN

Stack Overflow用户

发布于 2013-09-23 01:51:19

&&操作员的工作方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a && b
  1. 评估a
  2. 如果a是假的,则返回
  3. 返回评估结果b

因此,您所提到的行相当于:

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

如果以非零号、非空字符串或对象的形式提供回调,则可以很容易地跳过这段代码,但是如果您提供一个函数或什么都不提供(这正是代码的作者所期望的),那么它将正常工作,并且只有在提供回调时才调用回调。

编辑:

Truthy/Falsy简短地解释:

  • Falsy值:未定义,空,假,0,‘,NaN
  • 真理价值观:其他一切

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

票数 2
EN

Stack Overflow用户

发布于 2013-09-23 01:45:57

它将检查callback是否存在,如果存在,则将运行它。原因是&&算子在第一个参数为假的情况下会短路。因此,如果callback不存在,它将不会检查下半年

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18956157

复制
相关文章
jupyter中运行pyspark
Python for Spark显然比Scala慢。然而,易于学习,并且受益于我最喜爱的库。在我看来,Python是大数据/机器学习领域中原型设计的完美语言。
Tim在路上
2020/08/04
2.4K0
IQKeyboardManager每次运行都会断点到Bug ID:#550
在Xcode9一打断点就会在IQKeyboardManager断点在//Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix
傅_hc
2018/07/04
5000
Java中的lambda每次执行都会创建一个新对象吗
之前写过一篇文章 Java中的Lambda是如何实现的,该篇文章中讲到,在lambda表达式执行时,jvm会先为该lambda生成一个java类,然后再创建一个该类对应的对象,最后执行该对象对应的方法,以此来执行我们写的lambda方法体。
KINGYT
2020/01/13
6.1K6
返回执行结果的任务队列:ExecutorCompletionService
有时候我们需要展示一些内容,如果等所有内容都加载完毕再展示这样反而会降低用户体验; 因为如果消耗时间长那么用户需要瞪着空白的页面,反而会失去兴趣; 所以我们希望加载一点资源显示一点,对于那么超过我们容忍范围还未加载完毕的资源我们应该 不再去加载,放弃本次加载或者显示一些默认结果 模拟: final Random r = new Random(); // 创建一个固定大小的线程池 ExecutorService es = Executors.newFixedThreadPool(
用户1215919
2018/02/27
1.3K0
try{}catch{}finally{}运行后的执行结果
1.以下执行结果? (1).代码 public class Demo { public static void main(String[] args) { System.out.println(getValue()); } public static int getValue(){ Scanner sc = new Scanner(System.in); System.out.println("输入一个数"); int
2020/10/23
8060
如何在应用程序中调用CMD并返回运行结果
要求做一个图形界面的应用程序,输入命令行的命令,在后台调用CMD程序执行该命令但不显示DOS命令行窗口,而且能实时显示运行的结果。哪位知道怎么处理?谢啦
用户3519280
2023/07/06
2830
Future,带返回执行结果的线程使用方式
FutureTask是Future的一种实现方式. private final int count; public Counter(int count) { this.count = count; } public void get() throws InterruptedException { // 假设执行一些耗时的操作 Thread.sleep(3000); System.out.println("counter:" + count); } long start = Sys
用户1215919
2018/02/27
1.1K0
在Java中为什么不同的返回类型不算方法重载?
方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。 比如以下 4 个 method 方法就可以称之为方法重载,如下代码所示:
磊哥
2022/01/20
3.4K0
在Java中为什么不同的返回类型不算方法重载?
「Python」函数返回值、嵌套调用、执行结果
在程序开发中,有时候会希望一个函数执行结束后,告诉调用者一个结果,一遍调用者针对具体的结果做后续的处理。
python自学网
2022/05/16
2.2K0
「Python」函数返回值、嵌套调用、执行结果
java中==、equals的不同AND在js中==、===的不同
       1.==操作符:首先,对于非基本数据类型的对象比较,相同内存中存储的变量的值是否相等,注意是相同内存地址的才可,并且数值相同(当然地址相同,值也一定相同)才会返回true.     但是,对于基本数据类型的比较(比如:int flot double等),值相同,"=="比较便会返回true.(这是编译的规则,当进行基本数据类型的比较时,会编译生成if_icmpne指令不会进行比较地址。而进行对象比较时,会生成if_icmpne指令,会比较地址。生成的指令都是不同的)。
洋仔聊编程
2019/01/15
4K0
GWAS分析中协变量的区分(性别?PCA?不同品种?)
plink进行GWAS分析时,协变量都要是数字协变量,因子协变量需要转化为dummy变量(哑变量)然后与数字协变量合并,通过--covar进行合并。
邓飞
2022/12/13
2K0
GWAS分析中协变量的区分(性别?PCA?不同品种?)
uniapp如何封装全局方法 并返回执行结果
在uniapp中你可以这样实现,你可以使用Promise对象来实现当全局公共方法执行完后执行调用者的逻辑。以下是一个简单的示例代码:
兔云小新LM
2023/05/25
3.3K0
uniapp如何封装全局方法 并返回执行结果
在python中运行MATLAB代码从而实现批量运算结果
在安装好python和matlab的电脑上,如果需要做一些流程化的内容,matlab这个方面不擅长,此时可以借助python来开发,
用户9925864
2023/09/05
5790
在python中运行MATLAB代码从而实现批量运算结果
C#对称加密(AES加密)每次生成的密文结果不同思路代码分享
思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量。 代码 public static string Encrypt(string plainText, string AESKey) { RijndaelManaged rijndaelCipher = new RijndaelManaged(); byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组
磊哥
2018/04/26
1.6K0
java 查看进程状态_java执行shell命令并返回结果
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172503.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
8760
java 查看进程状态_java执行shell命令并返回结果
pyspark进行词频统计并返回topN
Part I:词频统计并返回topN 统计的文本数据: what do you do how do you do how do you do how are you from operator import add from pyspark import SparkContext def sort_t(): sc = SparkContext(appName="testWC") data = sc.parallelize(["what do you do", "how do you d
云海谷天
2022/08/09
6070
pyspark进行词频统计并返回topN
【Python】PySpark 数据处理 ② ( 安装 PySpark | PySpark 数据处理步骤 | 构建 PySpark 执行环境入口对象 )
命令 , 安装 PySpark , 安装过程中 , 需要下载 310 M 的安装包 , 耐心等待 ;
韩曙亮
2023/10/11
4930
【Python】PySpark 数据处理 ② ( 安装 PySpark | PySpark 数据处理步骤 | 构建 PySpark 执行环境入口对象 )
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task
命令行输出结果 : 打开 CSDN 客户端 , 然后任意点击一篇博客进入 , 输入内容如下 ;
韩曙亮
2023/03/29
6K0
【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task
mybatis返回结果处理
当查询的记录条数是多条的时候,必须使用集合接收。如果使用单个实体类接收会出现异常。如果返回的是一条记录可以用集合接收
一个风轻云淡
2023/10/15
2310
mybatis返回结果处理
Python 技术篇-通过管道命令获取cmd执行的结果,获取os.system()、subprocess.Popen()执行命令返回的结果
正常的 os.system() 执行完后只会返回个执行状态值,返回的 0 表示执行成功,1 表示执行失败。 如果想要获取到执行后的结果集,就需要用到管道命令 os.popen(),然后用 read() 方法可以读到返回的结果。subprocess.Popen() 命令也可以获取返回的结果。
小蓝枣
2021/12/01
8.4K1
Python 技术篇-通过管道命令获取cmd执行的结果,获取os.system()、subprocess.Popen()执行命令返回的结果

相似问题

查询每次运行时都会返回不同的结果。

46

每次我运行的时候,Pyspark dataframe都返回不同的结果。

15

每次运行boost::thread都会产生不同的结果

10

每次运行RandomForestRegressor都会得到不同的结果

11

每次运行代码我都会得到不同的结果

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文