所以我有一个loop
的简单代码,它遍历数组并使用一些条件语句来记录字符串。
myArray = [12, 17, 19]
function testLoop () {
for (let i = 0; i < 3; i++) {
console.log(i);
if (myArray[i] == 12) {
console.log('is 12')
} else if (myArray[i] == 17) {
console.log('is 17')
} else {
console.log('Default')
}
}
};
testLoop();
myArray = [12, 17, 19]
function testLoop () {
for (let i = 0; i < 3; i++) {
console.log(i);
if (myArray[i] == 12) {
return 'is 12'
} else if (myArray[i] == 17) {
return 'is 17'
} else {
return 'Default'
}
}
};
testLoop();
现在我的问题是,我们在函数中使用return
,但是现在输出为0
,控制台中没有其他内容。我知道返回字会终止执行,我真的不明白为什么这会阻止迭代的发生。理想情况下,一个函数还需要返回一些东西才能使其可测试。
请有人可以清楚地详细解释为什么这些条件条件不会在循环中运行,以及为什么我们没有循环遍历myArray
的每个项目并返回结果。
答案 0 :(得分:0)
这种写法:
myArray = [12, 17, 19];
function testLoop () {
for (let i = 0; i < 3; i++) {
console.log(i);
if (myArray[i] == 12) {
return 'is 12'
} else if (myArray[i] == 17) {
return 'is 17'
} else {
return 'Default'
}
}
};
console.log(testLoop());
return子句将在第一次迭代时被命中,并且循环将终止,因为遇到返回时函数执行本身会立即结束。
控制台将日志记录为0,因为它是循环console.log(i)
的第一条语句。
我添加了一个test.return的console.log来显示它在第一次迭代中返回“ is 12”。
我认为您期望的是类似yield的东西,它允许循环中的返回值在迭代器中进行转换
答案 1 :(得分:0)
首先,您不应该对两个声明使用相同的函数名,其次,您要做的就是console.log返回的值,以便它可以打印返回的值。 在这里看到小提琴:https://jsfiddle.net/v63wgpf4/
myArray = [12, 17, 19]
function testLoop () {
for (let i = 0; i < 3; i++) {
console.log(i);
if (myArray[i] == 12) {
return 'is 12'
} else if (myArray[i] == 17) {
return 'is 17'
} else {
return 'Default'
}
}
}
console.log(testLoop());
答案 2 :(得分:0)
如Nina所说,return结束了功能,您应该使用yeld关键字:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield
function* foo () {
yield 12;
yield 17;
yield 19;
}
const iterator = foo();
var index = 0;
while (index++ < 3)
console.log (iterator.next().value);