发表于: 2016-09-06 00:46:12
10 2272
今天完成的事:
1.完成任务3
明天计划的事:
1.任务4
收获:
任务3
1.三种location.href的用法
(本页面跳转、父页面跳转、最上层页面跳转)
2.localStorage本地存储数据
(http://www.cnblogs.com/timejs/p/4746599.html)
3.放在localStorage的数据通过JSON.stringify()和JSON.parse()处理可以解析还原为原本的类型
(因为localStorage中保存的数据是非JSON规范的字符串。要手动用JSON转成字符串再用JSON方法还原数据类型)
4.%取余运算
任务外:
在远近的推荐下阅读了篇关于数组乱序的文章,里边可以引申好几个知识点
(https://segmentfault.com/a/1190000005875191)
以下知识点来自方法三
1.从后往前的Fisher-Yates Shuffle
function shuffle(array) {
var _array = array.concat();
for (var i = _array.length; i--; ) {
var j = Math.floor(Math.random() * (i + 1));
var temp = _array[i];
_array[i] = _array[j];
_array[j] = temp;
}
return _array;
}
(1)a.concat(b)在a为空的情况下相当于复制b到a,这个应该是考虑到当b为数组时
会出现a引用了b的问题才不直接采用a=b来复制,良好习惯
(对象和数组采用引用传递,准确来说好像叫共享传递)
(2)数字转布尔值,非0为true,0为false,所以i--可以用作for的条件
(3)要注意在这里i--是先判断值后--,而写成--i则是先--后判断值,不能混用
以下知识点来自方法一
2.~~等同于math.floor
3.push()在末尾添加元素
4.splice()删除元素
以下知识点来自方法二
5.sort()排序
6.匿名函数 function()
7.function(){}()
由于函数实际就是一个表达式,值为该函数。
所以这里可以把function(){}看做一个叫a的函数(实际上是匿名的)
那么该式子相当于
a=function(){}; //定义一个匿名函数,赋予a
a(); //运行a函数
也等价于
function a(){};
a();
8.闭包
(我的理解大概指的是外部函数关闭后,内部函数仍然能够维持内部引用的外部函数里定义的变量,包括外部函数的参数)
(http://kb.cnblogs.com/page/110782/)
(可是闭包和匿名函数什么关系呢。。)
http://bbs.csdn.net/topics/320095442 13楼提到
闭包有以下几个优势或特点:
1. 减少了全局变量的个数,可以有效减少命名冲突
原因是包在里面的变量对于外面来说是不可见的,他们的作用域近局限在匿名函数的函数体内
2. 这种方式可以保存闭包外面的变量的状态
遇到的问题:
function shuffle(a) {
return a.concat().sort(function(a, b) {
return Math.random() - 0.5; });
}
尽管看了这些第二种方法仍然看不懂什么意思
主要是funtion(a,b)里a和b是什么,明明函数里边没有使用到
更新(16/09/06 16:45):
再确认了下sort()的用法,才发现这段,算是明白了a、b是什么了,function(a,b)就是这个比较函数。
(上图的比较函数采用的应该是升序排法时的情况)
方法二中a和b应该是指sort的对象数组中相邻两个元素。
排序标准以返回值为准,返回值<0时a和b不交换位置,返回值>0时则交换位置
但是返回值是用随机函数产生的,和a、b无关。
也即是排序标准是随机函数决定的。
评论