我正在学习所以我正在解决一个需要脚本来确定输入数字是否为素数的练习,我最初在循环中放置了一个console.log,当测试数字6时,它打印出来那个6不是素数两次然后打印另一个字符串“6是素数”。
我不明白为什么会给出这样的输出,为什么假的/不是打印出两次的素数,为什么两次精确?然后一旦打印出真/素数。
但是,我尝试修改该函数并用return返回console.log,该函数运行良好。
我知道函数的返回中断了,但它是否也会脱离循环?
虽然功能有效,但我只是想知道为什么会发生这种情况,我可能听起来很傻但我还是初学者所以我真的很感激你的帮助,这是我的代码。提前致谢
function prime(n){
for (var i = 2; i<n; i++){
if (n%i==0) {
return n + " is a not a prime number"
} else if (n%i !== 0 ){
return n + " is a prime number"
}
}
}
答案 0 :(得分:3)
console.log
只是向控制台输出一条消息。那就是它。
return
将退出当前正在执行的函数。
示例:
function printStuff() {
console.log("I'll print out");
console.log("So will I");
return;
console.log("I won't :(");
}
return
也用于从函数返回值。然后,您可以在console.log
等各个位置使用该值。
示例:
function add(x, y) {
return x + y;
}
var four = add(2, 2);
console.log(four); // 4
console.log(add(four, 2)); // 6
答案 1 :(得分:2)
根据我的理解,return将停止该函数并返回 final 结果,而console.log将简单地将其记录到控制台,而不会停止该函数。因此,当您的函数返回时,它会使您的函数完全停止运行。
答案 2 :(得分:2)
这就是你想要的:
function prime(n) {
if (n < 2) {
return n + " is a not a prime number";
}
for (var i = 2, max = n / 2 + 1; i < max; i++) {
if (n % i === 0) {
return n + " is a not a prime number";
}
}
return n + " is a prime number";
}
n % i === 0
,true
为i
时,N不是素数。因此,当您找到i
n % i === 0
为true
的{{1}}时,您可以立即返回“N不是素数”,留下循环(和函数)。for
- 循环结束后,返回“N是素数”。事实上,当return
- 循环结束时,你还没有for
编辑任何内容,这意味着内部的if
- 语句从未执行过。这意味着n % i === 0
从未true
,因此N是素数。 if
- 语句的用途。如果正数小于2,则表示它不能是素数。n % i === 0
和true
之间的任何i
,n / 2 + 1
绝不会n
,这意味着您可以减少循环的迭代次数在max = n / 2 + 1
停止约一半。请参阅this Fiddle了解演示。
答案 3 :(得分:1)
“return”将值返回给函数的调用者。 e.g。
var a = function() {
return "word";
console.trace("hellllooooo");
}()
a,现在等于字符串字。
此外,它会停止执行当前函数,因此永远不会调用console.trace命令。
另一方面,“console.log()”将其括号内的任何内容写入控制台(包含在大多数浏览器的开发工具中)。因此,console.log("words phrases nouns")
会将“单词短语和名词”吐入控制台。