好久没出现啦

第二个学年开始啦,今年的计划就是要平心静气做沉淀了,多看点书吧。

最近就是看了 object-oriented javascript - third edition,还没中文版就去翻了本英文版看…

Callback

callback,在每一次循环时做更多的事;良好的插槽,更好的扩展性

比如一个简单的例子(可能会觉得多此一举,但是用来展示callback的思想感觉还是合适的)

O(n^2)的时间复杂度

function multiplyByTwo(a, b, c) {
  var i, ar = [];
  for (i = 0; i < 3; i++) {
    ar[i] = arguments[i] * 2;
  }
  return ar;
}

function addOne(a) {
  return a + 1;
}


let myarr = [];
myarr = multiplyByTwo(10, 20, 30);    // multiplyByTwo 返回数组
for (let i = 0; i < 3; i++) {
  myarr[i] = addOne(myarr[i]);        // item++
}
console.log(myarr);                   // [21, 41, 61]

而使用了callback的模式来设计这个功能

O(n)的时间复杂度

function multiplyByTwo(a, b, c, callback) {
  let ar = [];
  for (let i = 0; i < 3; i++) {
    ar[i] = callback(arguments[i] * 2);
  }
  return ar;
}

myarr = multiplyByTwo(1, 2, 3, addOne);   // [3, 5, 7]

Closures

JS在ES5中只有function scope的概念,所以在父级function scope中是无法访问到子scope的变量的。(注意是访问到这个变量本身,而不单单是获取到变量的值。)

但是咱们可以用闭包来实现啊。

至于为啥强调是访问变量的本身,因为闭包实际上是 maintains a reference to the scope where the variable was defined.

This blog is under a CC BY-NC-SA 4.0 Unported License
Link to this article: http://nhh.ink/2017/09/11/OOJS-1/