首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript中"return"语句的奇怪行为

在JavaScript中,"return"语句用于从函数中返回一个值,并且它会导致函数立即停止执行。"return"语句的行为可能会在某些情况下看起来有些奇怪,但这是因为JavaScript的函数调用和执行上下文的特性。

首先,如果在函数中使用了"return"语句,但没有指定返回值,那么函数将返回一个"undefined"值。如果在函数中没有使用"return"语句,那么函数将默认返回一个"undefined"值。

其次,如果在一个函数中使用了多个"return"语句,那么只有第一个"return"语句会被执行。这是因为当函数遇到第一个"return"语句时,它会立即停止执行,并返回指定的值。

最后,如果在一个异步函数中使用"return"语句,那么它将返回一个Promise对象,该对象将在函数完成执行时解析为返回的值。

总之,JavaScript中的"return"语句可能会有一些奇怪的行为,但这些行为都是由于JavaScript的特性而导致的。为了避免这些问题,可以确保在使用"return"语句时明确指定返回值,并且避免在同一个函数中使用多个"return"语句。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavascriptReturnReturn false和Return true

Javascript返回值 Javascript返回值总共分为四类: return; return false; return true; return variable(变量); 这四种返回值其实有很大不同...i为匿名函数function(){return;}返回值,注意:在Javascript函数都有返回值,默认函数返回值为undefined。...从代码输出结果可以看出,return;主要作用是阻止函数继续执行,直接返回undefined。 注:在Javascriptundefined == null,注意==与===区别。...Javascripttrue == 1,true == '1',正常情况下,return true是返回一个布尔值,也可以阻止函数继续执行。...5. return variable return variable主要是在Javascript定义一个变量,在函数中进行返回,与通常返回变量没有区别。

2.2K10

delete奇怪行为

如getComputedStyle()) 深度遍历 当然,直接添一个getValue()也能达到想要效果,但getter对使用方更友好,外部完全不知道值是提前算好还是现算 delete奇怪行为分为...但规则是这样,所以奇怪行为1是合理 占位初始值 猜测如果属性已经存在了,defineProperty()会收敛一些,考虑一下原descriptor感受: var obj = {}; obj.value...注意:变量对象和活动对象都是抽象内部机制,用来维护变量作用域,隔离环境等等,无法直接访问,即便Global环境变量对象看起来好像就是global,这个global也不全是内部变量对象(只是属性访问上有交集...) P.S.变量对象与活动对象这种“玄幻”东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境特殊性 eval执行环境声明属性和函数将作为调用环境(也就是上一层执行环境)变量对象属性存在...: 如果操作数不是个引用,直接return true 如果变量对象/活动对象身上没有这个属性,return true 如果属性存在,但有不能删天赋,return false 否则,删除属性,return

2.3K30

JavaScript return await promise 与 return promise

原文地址:'return await promise' vs 'return promise' in JavaScript 原文作者:Dmitri Pavlutin 译文出自:掘金翻译计划 当从异步功能返回时...相同行为 为了找到两个表达式(与)区别,(return await promise vs return promise), 我要使用辅助功能。 delayedDivide(n1, n2)....在此步骤,您已经看到使用和没有区别 return await promise and return promise 至少在处理成功履行承诺时。 但是,让我们搜索更多! 2....不同行为 现在,让我们采取另一种方法,特别是尝试与被拒绝承诺合作。要使功能返回被拒绝承诺,让我们设置第二个参数。...return await promiseawait `catch(error) {...}声明捕获只等待拒绝承诺在声明。try {...} 喜欢这个帖子?请分享!

2K20

聊聊jedisreturn行为

序本文主要研究一下jedisreturn行为spring-data-redisRedisTemplateorg/springframework/data/redis/core/RedisTemplate.java...)中小结spring-data-redisreturn主要是执行connectionclose方法,对应到jedis就是jedis.close(),它会先判断isBroken(取redis.clients.jedis.Connection.broken...factory.passivateObject§,最后根据maxIdle参数来判断,超出则执行destroy,否则根据是否Lifo放回到连接池(idleObjects)也就说假设获取连接之后,执行时候...returnBrokenResource从而关闭坏掉连接,间接实现testOnReturn效果如果在获取连接时候,redis挂了,但是连接池仍然有连接,若没有testOnBorrow则返回然后使用...则validate时候能验证出来连接有问题,则会执行destory然后继续循环获取连接池连接,直到连接池连接没有了;若获取连接时候连接池没有空闲连接了,则走create逻辑,这个时候create

26220

return语句用法

HTML5学堂:在函数当中,存在着return语句,今天我们就主要讲解一下return在函数作用,也来提一提return默认值是多少,还有就是return语句返回内容,在书写时需要注意什么。...return在函数作用 我们如果将函数看做一个加工厂,参数就是我们向加工厂投入原料,具体函数功能实际上就是加工过程,而return语句代表返回值,就是加工厂在实现加工之后给“投资人”成品。...return语句另一个特点,则在于在函数当中,遇到return语句之后就意味着函数运行结束,在此之后代码是不运行。...因此我们可以通过return语句控制函数是否结束。 return默认值 在一些函数当中,我们有书写return语句,但是在有些函数并没有出现return语句,那么此时,这些函数返回值是多少呢?...此处主要涉及是JS语法问题,在JS,默认用分号结束一条语句,在return之后存在一个换行符,虽然没有分号,但是系统会默认为一句话结束,增加一个分号,于是,上面JS代码return语句部分就等价于如下代码

1.3K50

聊聊jedisreturn行为

序 本文主要研究一下jedisreturn行为 spring-data-redis RedisTemplate org/springframework/data/redis/core/RedisTemplate.java...) 小结 spring-data-redisreturn主要是执行connectionclose方法,对应到jedis就是jedis.close(),它会先判断isBroken(取redis.clients.jedis.Connection.broken...factory.passivateObject§,最后根据maxIdle参数来判断,超出则执行destroy,否则根据是否Lifo放回到连接池(idleObjects) 也就说假设获取连接之后,执行时候...returnBrokenResource从而关闭坏掉连接,间接实现testOnReturn效果 如果在获取连接时候,redis挂了,但是连接池仍然有连接,若没有testOnBorrow则返回然后使用...则validate时候能验证出来连接有问题,则会执行destory然后继续循环获取连接池连接,直到连接池连接没有了;若获取连接时候连接池没有空闲连接了,则走create逻辑,这个时候create

20120

JavaScriptbreak、continue和return区别

: 从当前方法退出,返回到该调用方法语句处,继续执行。...,不做任何处理 } i += 1; } 总结 1、return语句作用 (1) return 从当前方法退出,返回到该调用方法语句处,继续执行 (2) return 返回一个值给调用该方法语句...,返回值数据类型必须与方法声明返回值类型一致,可以使用强制类型转换来是数据类型一致 (3) return 当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。...2、break语句作用 (1) 只能在循环体内和switch语句体内使用break语句。 (2) 当break出现在循环体switch语句体内时,其作用只是跳出该switch语句体。...,即跳过本次循环体余下尚未执行语句,接着再一次进行循环条件判定。

1.4K40

Kotlin基础学习之lambdareturn语句详解

前言 当我们爱上lambda并且大范围使用它时候,我想大家都会被lambdareturn语句狠狠地调戏过,所以今天我们需要一起来揭开lambdareturn神秘面纱。...,最后End不是被偷吃了,而是因为demo函数在判断条件满足情况下提前返回了,这样return用高端一点语句就叫做:非局部返回。...如果我们想要return从forEach(即lambda)返回怎么办?...这就是lambdareturn语句所有内容,很简单是不是?接下来就是尽情玩耍时间了?...不好意思,这个调用会因为编译失败不给你运行机会, 通过上面的讨论我们知道,非局部返回是从lambda调用点所在函数返回,所以这就要求我们lambdareturn语句只能出现在内联函数且该lambda

1.2K30

再谈try{ return }finally{}return

简单翻译: 如果try语句块里有return,那么代码行为如下: 1.如果有返回值,就把返回值(如果存在)保存到局部变量 2.执行jsr指令跳到finally语句块里执行 3.执行完finally语句块后...基本数据类型。...(1)JDK自带引用类型: (2)自定义引用类型: 小结: (1)不管try{}、catch{}是否有return语句,finally{}都会执行,除非未执行到finally{}时,执行当前...FunctionThread被interrupted 或killed; (2)finally{}没有return语句时, 如果try{}或catch{}返回值是基本数据类型或其包装类时,finally...语句覆盖之前try{}、catch{}return语句; (3)如果finally{}包含了return语句,即使前面的catch{}重新抛出了异常,则调用该方法语句也不会获得catch{}

1.5K40

yield from 关键字 return 语句

我经常需要写一些比较复杂代码,常常会遇到各种各样问题。比如我在使用yield from 表达式时,return 语句问题。...我们知道,在使用 yield from 表达式时,return 语句作用是在子生成器(被调用生成器)执行完毕后,返回最终结果到调用者。这可以让生成器在嵌套结构更清晰地传递值。...,子生成器被允许执行带有值 return 语句,该值变为 yield from 表达式值。...在 "yield from" 语句中,子生成器 return 语句是如何工作?...return4 函数现在是一个生成器。为实现这一目标,必须在函数任何地方出现 yield(Python 3.5 中有一个新相关特性,但现在并不重要)。

8010

break和continue return_break语句和continue语句区别

前言 一般刚开始遇到这三个关键字,都会有点乱,return还好,特别是break和continue,特别容易搞混,所以这里记录一下 正文 1、return :直接跳出当前方法,返回到该调用方法语句处...循环外-----"); } } break测试打印结果 continue测试打印结果 return测试打印结果 结论: 从打印可以看出:...只是结束了本次循环, return: 当i = 3时,执行return后,不仅结束了循环,而且结束了方法,直接回到主函数了,所以return作用...,主要多用于循环和switch结构 这里说一下,我上面说结构,是指循环体结构结构,switch结构等,不知道怎么形容了这种东西了,哈哈,感觉语法结构咋一听也不知道是什么,解释一下哈 理解好这个三个关键字...注意: 当前两个字,是指当前所在结构,例如下面当break出现在循环体switch语句体内时,其作用只是跳出该switch语句体 代码: breakbreak /** * break

92820

你真的了解try{ return }finally{}return

当前x值是1,下一步: ? 这一步跳到finally,现在x=2,说明执行了try块 ++x,下一步: ? 又跳回try块return,当前x=3....是不是有些疑惑 从上面过程可以看到: 在 try 里 使用 return 还是会执行finally语句(我们用debug模式看到了程序会跳到 finally语句里执行)执行完finally语句才执行...从上面 图可以合理推理出return +xx;是分开来执行,先执行++x,再执行finally,最后才执行return跳出函数。因为程序调两次跳到了 return +xx; 语句上。...翻译: 如果try语句里有return,那么代码行为如下: 1.如果有返回值,就把返回值保存到局部变量 2.执行jsr指令跳到finally语句里执行 3.执行完finally语句后,返回之前保存在局部变量表里值...当执行到return ++x;时,jvm在执行完++x后会在局部变量表里另外分配一个空间来保存当前x值。 注意,现在还没把值返回给y,而是继续执行finally语句语句

1.2K40

你真的了解try{ return }finally{}return

验证 finally 语句是否会执行,以及 return 和 finally执行顺序 在求知欲驱动下,我继续进行更深探索,果断打开了Oracle主页,翻阅了java 官方教程finally语句...另外,在java语言规范有讲到,如果在try语句里有return语句,finally语句还是会执行。它会在把控制权转移到该方法调用者或者构造器前执行finally语句。...继续按一下F6,程序执行到 ++x;,但还没执行该语句,因此此时x=2(刚执行完return ++x语句++x,但没执行return) ?...从上面过程可以看到, 在 try 里 使用 return 还是会执行finally语句(我们用debug模式看到了程序会条件 finally语句里执行) 执行完finally语句才执行 return...简单翻译下: 如果try语句里有return,那么代码行为如下: 1.如果有返回值,就把返回值保存到局部变量 2.执行jsr指令跳到finally语句里执行 3.执行完finally语句后,返回之前保存在局部变量表里

1.2K50
领券