<script> //獲取1000以內的質數 function check(num){ if(index%2){ for(var j=2;j<index;j++){ if(index%j==0){ return false; } } }else{ return false; } return true; } console.time("hello"); var nums = [1,2]; var index = 3; while(nums.length < 30){ if(check(index)){ nums[nums.length] = index; } index++; } console.log(nums); console.timeEnd("hello"); </script>
一下代碼是第一次寫的
var nums = [1,2]; var index = 1; while(nums.length < 30){ for(var i=1;i<index;i++){ if(index%2){ for(var j=2;j<index;j++){ if(index%j==0){ break; } } if(nums[nums.length-1]<index){ nums[nums.length] = index; } }else{ break; } } index++; }
結果測試發現前幾個質數找到了,后幾個有錯誤,經分析是因為在一個數不是質數的時候沒能跳出for,雖然知道break可以跳出for,但是對於雙重for循環,break就顯得不行了,此時就在思考,如何能夠跳出雙重for循環呢?靈機一動,突然想到了神奇的return,return就不在乎有多少層for循環了,於是乎問題就解決了!
其實最關鍵的就是思路問題,經驗問題,如何跳出多重for循環--return!!!