实现一个函数,每次调用返回下一个质数,要求不使用全局变量,且函数本身不接受任何参数
从题目的要求可以知道,这个函数每次调用都会返回一个质数,也就是说每次调用后都会返回一个函数。
首先我们定义一个判断一个数是否为质数的方法:
function isPrime(num) { for (let i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) { return false } } return true }
传统的方式是使用闭包方法来解决:
function primeHandler() { let prime = 1 return () => { while (true) { prime++ if (isPrime(prime)) { return prime } } } } const getPrime = primeHandler() console.log(getPrime()); // 2 console.log(getPrime()); // 3 console.log(getPrime()); // 5
既然是单步执行的,那么我们就可以使用迭代器方式实现:
var prime = {} prime[Symbol.iterator] = function() { let prime = 1; return { next() { while(true) { prime++ if (isPrime(prime)) { return prime; } } } } } var getPrime = prime[Symbol.iterator]().next; console.log(getPrime()); // 2 console.log(getPrime()); // 3
上一个实例我们知道实现迭代器的方式是很麻烦的,可以使用生成器函数去替代迭代器的功能,所以上面的代码可以使用生成器函数改造如下:
function* primeGenerator () { let prime = 1 while (true) { prime++ if (isPrime(prime)) { yield prime } } } var getPrime = primeGenerator().next().value console.log(getPrime()); // 2 console.log(getPrime()); // 3
使用声明:
1. 本站所有素材(未指定商用),仅限学习交流。
2. 会员在本站下载的VIP素材后,只拥有使用权,著作权归原作者及码云笔记网所有。
3. 原创商用和VIP素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 本平台织梦模板仅展示和个人非盈利用途,织梦系统商业用途请预先授权。
码云笔记 » 实现一个函数,每次调用返回下一个质数,要求不使用全局变量,且函数本身不接受任何参数
1. 本站所有素材(未指定商用),仅限学习交流。
2. 会员在本站下载的VIP素材后,只拥有使用权,著作权归原作者及码云笔记网所有。
3. 原创商用和VIP素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 本平台织梦模板仅展示和个人非盈利用途,织梦系统商业用途请预先授权。
码云笔记 » 实现一个函数,每次调用返回下一个质数,要求不使用全局变量,且函数本身不接受任何参数