愚人節都沒人騙,做幾道題騙騙自己


2014過去四分之一了,回憶過去,把握現在,展望未來,總結三部曲。

又是好久沒寫博客了,也不回憶過去,展望未來,就把握一下現在。

恰好今天又是愚人節,寫一篇博客,來安慰自己,並沒有整天無所事事~ 

也快到清明節了,祭奠一下即將逝去的大學漫無追求的生活

 

今天下午第二節有課,抱着一本厚厚的書,來到教室,找個角落坐下了,本以為自己是個good goog study ,day day up的好學生,但結局總是意料之內,情理之中,玩了整整兩節課的游戲終於熬過去了,但是!! 游戲一個記錄都沒破。拖着身子,還是原來的書,還是原封不動的紙,went back。

一天又在我的指尖逝去,真是閑得無聊。

看我沒事,學長給我除了一道題,具體忘了大致題意是:有[1-52] 52個數,隨機分成4組,用js 實現。一聽題,淺顯易懂,肯定巨簡單,反正閑的,have a try !

整理思路:用隨機函數依次隨機生成52個隨機數,范圍[1,52],每組13個,4組,wow~~ just do it。。反復,反復。。。終於終於......做出來了,oh ~ yean!~

給學長展示了一下,沒看代碼,看了一下功能,不錯~功能實現了,沒出錯誤,但是但是。。。時間花了一個小時!!!

那我也挺滿足的,至少我做出來了,代碼附上,大家觀摩一下:

var objApp = {
//生成隨機數 selectFrom:
function(lowerValue, upperValue) { var choices = upperValue - lowerValue + 1; return Math.floor(Math.random() * choices + lowerValue); },
// 功能實現 play:
function() { var len = 0,n,obj = {}, arr =[]; while (len < 52){ n = this.selectFrom(1, 52); if (!obj.hasOwnProperty(n)){
//此處不用數組而用對象,好處:減少一次循環嵌套 不然得 while (obj.indexOf(n) != -1) 了,再者,js也講究一切皆對象,這一串好像是誰說的來着。。。。 obj[n]
= n; arr[arr.length] = n; len++; } } for(var i=0; i<52; i++){ document.write( parseInt(arr[i], 10)," " ); if(i%13 === 0 && i!==0) document.write("<br/>") } } }; objApp.play();

不錯吧,可是我一個小時的成果。

話還沒說完,接下來我該羞愧到無地自容了。

學長花幾分鍾來着?代碼多長再加上打字速度,自個兒算算。

附上另一個實現方法:

var a0 = [], a1 = [], a2 = [], a3 = [], arr = [];
for(var i=0; i<52; i++){
   arr[i] = i+1; 
}
for(var i= 52; i>0; i--){   //這塊必須這樣 很巧妙:i等於多少,恰好arr的length是多少。
   var m = i%4;  //為了獲取每次的0,1,2,3
   var num = arr.splice(Math.floor(Math.random()*i),1); //將[1,i] i個數隨機刪除一個數
   eval("a"+m).push(num[0]); //將刪除的那個數付給a0,a1,a2,a3
//eval("a"+m) 將字符串轉換成js程序 是不是終於發現了eval()用武之處,不管你是不是,反正我是~· 又學會了一招,哈哈~
}
console.log(a0);console.log(a1);console.log(a2);console.log(a3); 

到這看再看看自己花一個小時精挑細選的代碼,算了,別丟人現眼了,還是回山上再次好好修煉吧。。。

如此被虐,再來一道,來挽回一丟丟的顏面

for(var i=0; i<5; i++){
   setTimeout(function(){
     console.log(i);
   },100)
}  //來猜猜,運行結果是啥呢???

答案是什么呢????  0,1,2,3,4,5 ??? 5個undefined???還是啥呢,好好想想,可別再丟人了丫。。左思右想。。。居然是55555。

tell me why!!!

for(var i=0; i<5; i++){   
   setTimeout(function(){
     console.log(i);
   },100)
}  //5,5,5,5,5  
  // 每100ms執行的是function(){console,log(i);} 然而i是多少呢??等於多少就從作用域查找.what is the meaning of '作用域'??  
// J
ust remember a word: 作用域由定義是決定,與執行環境無關。看看在哪定義的,而此時i等於多少,在循環中定義,但此時。。。此時。。。i=5了
// so... answer: 5 5 5 5 5  understand??

居然是5,5,5,5,5 其實我是想實現輸出0,1,2,3,4  怎么修改它!

for(var i=0; i<5; i++){
    setTimeout(function(j){
       console.log(j);
    },100,i)
}; // 0,1,2,3,4  OK  實現了,但是總感覺那里不對勁~~  換個方式

for(var i=0; i<5; i++){
    (function(j){
       setTimeout(function(){
          console.log(j);
       },100)
    })(i)  
}; //0,1,2,3,4  雖然實現是一樣的,但是換了方式,趕覺很高級的樣子。
 好吧,再來一道

一個數組里裝着各種網址,讓你把正確能訪問的網址選出來用數組裝着。 ps:可以用jquery。

怎么實現???思來想去 ,我咋知道哪些網站是可以訪問,你又不讓我在瀏覽器上試一遍,逗我玩呢...

What am i supposed to do??

提供一個方案好了:用$.ajax()把每個網址測試一下好了,代碼:
var newarr = [];
["www.baidu.com","weibo.com","http://jquery.com/jquery-wp-content/themes/jquery/images/gauze.png","1231dfdfb.com"].forEach(function(elem){
   $.ajax({
      url: elem,
      type:"get",
      success:function(res){
          newarr.push(elem);
      },
      error: function(err){
     }
   });
}); //無法實現

想了一下感覺好像還不錯的樣子,試了一下,www.baidu.com 居然變成了不能訪問,必須錯了,除非你網絡有問題,正常baidu不可能無法訪問。原來,原來:ajax雖然有很多好處,好處是啥來着?異步,局部更新,來個實驗鞏固一下:

var a = 0;
var newarr = [];
["www.baidu.com","weibo.com","http://jquery.com/jquery-wp-content/themes/jquery/images/gauze.png","1231dfdfb.com"].forEach(function(elem){
   $.ajax({
      url: elem,
      type:"get",
      success:function(res){
         a = 12;
  
      },
      error: function(err){
       a = 13
     }
   });
   console.log(a);  //這塊輸出的是什么呢 ???  答案是 0, 0, 0, 0   原因:異步導致的。異步是啥?去翻漢語字典
}); 

 

但是,ajax是不能跨域請求,腫么辦?? 突然想到好像script標簽可以實現跨域。

<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script> //這樣是可以跨域的

等等,好像有個叫jsonp這個東東,修改代碼:

["www.baidu.com","weibo.com","http://jquery.com/jquery-wp-content/themes/jquery/images/gauze.png","1231dfdfb.com"].forEach(function(elem){
   $.ajax({
      url: elem,
      type:"get",
      dataType : "jsonp",
      jsonp: "callbackparam",
      success:function(res){
          newarr.push(elem);
      },
      error: function(err){
     }
   });
});  //無法實現

貌似還是不行,因為我們不知道 人家的 callbackparam 到底叫什么,總不能我們隨便去,唉~ 就是自己取了也是白搭。

貌似實現不了,怎么辦??

好像有個complete方法,如何實現。。。。。

凌晨了,洗洗睡吧。。不能耽誤浪費了白天的大好陽光。。。

 

不對的地方或者更好的方法,歡迎各位糾正補充~

ps:愚人節都過了,都沒有被表白,說明真的沒人愛了… 默默滾回去敲代碼、、、


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM