如果我在一个函数中返回两次,第二个会覆盖第一个吗?
If I return twice in a function, would the second one overwrite the first one?
我正在用Javascript写一个函数。基本上,如果数组的第一个元素中的字符串包含数组的第二个元素中的字符串的所有字母,它应该返回true
。我正在测试输入["hello","hey"]
function mutation(arr) {
var string1 = arr[0].toLowerCase();
var array=[];
for (i=0;i<=string1.length-1;i++) {
array[i]=string1[i];
}
var string2 = arr[1].toLowerCase();
var result = true;
label:
for(i=0;i<string2.length;i++) {
if (array.indexOf(string2[i]) == -1) {
result = false;
break label;
}
else {
result = true;
}
}
return result;
}
这将给我正确的结果false
。但是,如果我以不同的方式编写循环,那么它将给我true
。
label:
for(i=0;i<string2.length;i++) {
if (array.indexOf(string2[i]) == -1) {
return false;
break label;
}
else {
return true;
}
}
我在第二个方法中哪里做错了?
return
语句立即终止函数。在第二个实现中,早期返回false
确实是正确的,但是return true
语句是错误的——如果第一个元素不包含在第二个数组中,它将返回true。实际上,您是在对循环求反——只检查第一个元素,并立即返回一个值。
您在这里的目的是只返回false
值:
for (i = 0; i < string2.length; i++) {
if (array.indexOf(string2[i]) == -1) {
return false;
}
}
// If we finished the loop and haven't returned false, the return value is true:
return true;
第二个方法在这里中断:
return true
当返回值为正匹配时,FOR循环终止。
在初始版本中,因为它只设置result = true
,所以FOR
循环继续,直到遇到FALSE,然后显式BREAK
发生。
然而,在另一个版本中,if语句将遇到RETURN FALSE
或RETURN TRUE
,它将只迭代一次,返回结果并结束FOR循环。
在您的第一种情况下,逻辑被退出并返回值false
,只要它满足您的情况中的条件(array.indexOf(string2[i]) == -1)
。
在第二种情况下,数组的第一个元素不满足条件,落入else
条件,因此退出,返回true
。
相关文章:
- 尝试在两次迭代中警告同一选择器的值,在第一次迭代中得到正确的值,而在第二次迭代中获得不正确的值.为什么?
- 我这里有两个表格,在提交验证第一个表格后,我如何转到第二个表格进行验证
- 为什么当订阅两次rx 2.3中的observable时,第二次订阅没有收到任何值
- 在页面中使用了两次多个图像上传,但第一个正在工作,另一个不起作用
- 如何使用 jQuery 交换网页中的两个图像(连续两次点击)
- 查找与通过两次调用地理编码创建的两个 latlng 对象的距离
- 两个选项卡—第一个选项卡在第二个选项卡中处于调试模式时被卡住
- AngularJS自定义过滤器调用了两次,并在第二次调用时删除输入数据
- 若在两个不同的选项卡中打开同一个页面,如何防止javascript运行两次
- 两个指令引用一个变量,但第二个指令不引用;不要急于改变
- ajax表单在第二次提交时提交了两次,在第三次提交时又提交了三次,等等
- 页面加载后的第一个锚定链接需要单击两次
- 从iframe中选择具有相同类名的两个DIV中的第二个
- 为什么是Backbone.Collection为第一个查看器显示了两次
- 我在一页上有两个简单的javascript幻灯片,但第二个停止了第一个工作
- 在JavaScript中,第一个绑定决定了谁“;这个“;是(绑定两次或第二次并不重要)
- 如果我在一个函数中返回两次,第二个会覆盖第一个吗?
- 当控制第二个窗口中的内容时,单个按键触发两次
- Ajax调用成功,第二个Ajax调用发送两次
- window.open两次不起作用(第二个窗口没有出现)-Blocker解决方法