发表于: 2016-09-06 00:46:12

10 2275


今天完成的事:

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无关。

也即是排序标准是随机函数决定的。



返回列表 返回列表
评论

    分享到