柯里化函数通常也称为部分求值, 其含义是给函数分步传递参数, 每次传递参数后部分应用参数, 并返回一个更具体的函数接受剩下的参数, 这中间可嵌套多层这样的接受部分函数参数, 直至返回最后结果.
例子:
实现 carrying 函数, 完成以下需求, 代码如下:
- function sum(a,b,c){
- return a+b+c;
- }
- function currying(fn){
- `//todo`(自己编写的代码)
- }
- var curring = curring(sum);
- console.log(currying(sum,1,2,3)) //6
- console.log(currying((1),(2),(3)) //6
- console.log(currying((1,2),3)) //6
- console.log(currying((),(1),(2),(3)) //6
- console.log(currying(1,2,3)) //6
- var currying = function (fn) {
- var _args = [];
- return function () {
- if (arguments.length === 0) {
- return fn.apply(this, _args);
- }
- Array.prototype.push.apply(_args, [].slice.call(arguments));
- return arguments.callee;
- }
- };
- function sum(a,b,c){
- return a+b+c;
- }
快速排序
大致分三步:
1, 找基准 (一般是以中间项为基准)
2, 遍历数组, 小于基准的放在 left, 大于基准的放在 right
3, 递归
- function quickSort(arr){
- // 如果数组 <=1, 则直接返回
- if(arr.length<=1){
- return arr;
- }
- var pivotIndex=Math.floor(arr.length/2);
- // 找基准, 并把基准从原数组删除
- var pivot=arr.splice(pivotIndex,1)[0];
- // 定义左右数组
- var left=[];
- var right=[];
- // 比基准小的放在 left, 比基准大的放在 right
- for(var i=0;i<arr.length;i++){
- if(arr[i]<=pivot){
- left.push(arr[i]);
- }
- else{
- right.push(arr[i]);
- }
- }
- // 递归
- return quickSort(left).concat([pivot],quickSort(right));
- }
外边距重叠
外边距重叠失败盒子模型中的一个属性, 在 CSS 当中, 相邻的两个盒子的外边距可以结合成一个单独的外边距, 这就是外边距重叠.
来源: http://www.bubuko.com/infodetail-2874030.html