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:愚人节都过了,都没有被表白,说明真的没人爱了… 默默滚回去敲代码、、、