// ask: 最后一次 console.log(i) 值是多少?为什么?
// let i = 10
// while (i <= 10) {
// console.log(i)
// i--
// if (i === 8) break
// }
// console.log('breake 跳出循环')
// ask: 对于每次循环,写出你认为会显示的值;以下两个循环的 console 值是否相同
// let i = 0;
// while (++i < 5) console.log(i) // 前置,返回自增后的值
// res: 1,2,3,4
// let i = 0;
// while (i++ < 5) console.log(i) // 后置,返回自增前的值
// i++ 返回值:0,1,2,3,4
// res: 0,1,2,3,4(x)
// 正确的res: 1,2,3,4,5
// 分析:console.log(i) 是在每次自增之后才执行的语句,所以,拿到的是当前已经更新后的i值
// ask: 对于每次循环,写出你认为会显示的值;以下两个循环的 console 值是否相同
// 两中情况输出结果都是一样的,这里并没有使用到 ++i 和 i-- 的返回值,所以每次循环++i和i++都是让i加一
// for (let i = 0; i < 5; i++) console.log( i );
// res: 0,1,2,3,4
// for (let i = 0; i < 5; ++i) console.log( i );
// res: 0,1,2,3,4
// ask: 使用for循环输出偶数
const fn = (n) => {
let res = []
// for (let i = 0; i <= n; i++) {
// if (i % 2 === 0 && i !== 0) console.log(i)
// }
// for (let i = n; i > 0; i--) {
// if (i % 2 === 0) res.unshift(i)
// }
let i = 0
while (++i) {
if (i % 2 === 1) continue
if (i > n) break
res.push(i)
}
return res
}
// console.log(fn(10))
// ask: 重写代码,在保证不改变其行为的情况下,将 for 循环更改为 while
const taskFn2 = () => {
// for (let i = 0; i < 3; i++) {
// console.log(`number ${i}!`);
// }
let i = 0
while (i < 3) {
console.log(`number ${i++}!`);
}
}
// taskFn2()
// ask: 循环一直在请求一个数字,直到用户输入了一个大于 100 的数字、取消输入或输入了一个空行为止
const taskFn3 = () => {
let number = 0
while (number <= 100 && number != null) {
number = prompt('Please enter a number greater than 100: ')
}
// do {
// number = prompt("Enter a number greater than 100?", 0);
// } while (number <= 100 && number)
console.log('取消输入')
}
// taskFn3()
// ask: 输入任意数字n,输出 2 到 n 之间的所有 素数(质数)。
// 素数:是指大于1,且只能被1和它本身整除的数字
const taskFn4 = (n) => {
let res = []
// 遍历1到n区间内所有数字i,
// 在区间(1,i)之间只要找到一个i的除数,说明这个数字i不是素数;反之他是素数
nextPrime: for (let i = 2; i <= n; i++) {
for (let j = 2; j < i; j++) {
if (i % j === 0) continue nextPrime;// i is not prime
}
res.push(i)
}
return res
}
// console.log(taskFn4(10))