js 進階知識
閉包
注意到返回的函式在其定義內部應用了區域性變數arr,當一個函式返回一個函式後,其內部的區域性變數還被新函式引用,閉包用起來簡單,實現起來不容易。
箭頭函式
x => x * x
相當於
function(x){
return x*x
}
高階函式
map()
map()
作為高階函式,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意複雜的函式,比如,把Array
的所有數字轉為字串:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要一行程式碼。
reduce
再看reduce的用法。Array的reduce()
把一個函式作用在這個Array
的[x1, x2, x3...]
上,這個函式必須接收兩個引數,reduce()
把結果繼續和序列的下一個元素做累積計算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
比方說對一個Array
求和,就可以用reduce
實現:
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
比方說對一個Array
求和,就可以用reduce
實現:
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
sort()
Array
的sort()
方法預設把所有元素先轉換為String再排序,結果'10'
排在了'2'
的前面,因為字元'1'
比字元'2'
的ASCII碼小
要按數字大小排序,我們可以這麼寫:
'use strict';
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
console.log(arr); // [1, 2, 10, 20]
例如,在一個Array
中,刪掉偶數,只保留奇數,可以這麼寫:
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
把一個Array
中的空字串刪掉,可以這麼寫:
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim(); // 注意:IE9以下的版本沒有trim()方法
});
r; // ['A', 'B', 'C']
可見用filter()
這個高階函式,關鍵在於正確實現一個“篩選”函式。
相關文章
- Vuejs進階知識(十八)【component 進階知識】VueJS
- Vuejs進階知識(十六)【mixin】VueJS
- Vuejs進階知識(十九)【slot】VueJS
- Vuejs進階知識(十七)【computed properties】VueJS
- Vuejs進階知識(二十四)【自定義Directive】VueJS
- 前端進階知識彙總前端
- Redis進階知識一覽Redis
- PHP進階知識總結PHP
- Android進階知識:ThreadLocalAndroidthread
- C++11進階知識列表C++
- Vuejs進階知識(二十一)【生命週期,最佳實踐】VueJS
- 前端進階必備知識彙總前端
- Android進階知識:Handler相關Android
- Android知識進階樹——Window & ViewRootImplAndroidView
- 前端進階-個人筆記-小知識前端筆記
- web知識進階——字元編解碼Web字元
- css零星進階知識點CSS
- 前端進階必須懂得TCP/IP知識前端TCP
- AcWing 進階課知識點模板梳理
- JavaEE進階知識學習-----SpringBootWeb進階-7-AOP處理請求知識JavaSpring BootWeb
- Java-100天知識進階-JVM記憶體-知識鋪(三)JavaJVM記憶體
- Docker知識進階與容器編排技術Docker
- Vue進階知識(一)------專案初始化Vue
- JavaEE進階知識學習----Java NIO-4Java
- 直播美顏SDK的人臉識別技術進階知識
- Vuejs進階知識(二十三)【與CSS前處理器結合使用】VueJSCSS
- JavaScript進階知識點——函式和物件詳解JavaScript函式物件
- 一些常用的 Git 進階知識與技巧Git
- 後端知識點總結——NODE.JS(高階)後端Node.js
- js 基本知識JS
- Web前端進階之JavaScript模組化程式設計知識Web前端JavaScript程式設計
- 進階計劃 | 知識小測第一期
- Java 物件導向基礎 以及進階知識 總結Java物件
- 前端知識點總結——JS高階(持續更新中)前端JS
- java知識點-高階Java
- 高階儲存知識
- Android知識進階樹——RemoteViews使用和原理詳解AndroidREMView
- JavaScript進階【一】JavaScript模組化開發的基礎知識JavaScript