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 '作用域'??
// Just 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:愚人節都過了,都沒有被表白,說明真的沒人愛了… 默默滾回去敲代碼、、、