53.2-匿名函数和高阶函数

2020-05-21  本文已影响0人  BeautifulSoulpy

生活挺美好的,越努力越美好。因为还有很多:要认识的人,要看的风景,要去的城市,要买的东西!

总结:

  1. 函数是一等公民;函数会声明提升,函数表达式不会;要用 先定义,按规范来写;
  2. for -of 取内容,for in 取索引;
JS语法
function 函数名(参数列表) {
    函数体;
    return 返回值;
}

function add(x, y) {
    return x + y;
}
console.log(add(3, 5));

1. 函数表达式

使用表达式来定义函数,表达式的函数名称可以省略,如果这个函数名称不省略,也只能用在此函数内部;

// 匿名函数
const add = function(x, y) {      // 将函数赋值给add ;
    return x + y;
}
console.log(add(4,5))   

// 有名字的函数表达
const sub = function fn(x,y) {
    return x - y;
};
console.log(sub(5, 3));
//console.log(fn(3, 2)); // fn只能用在函数内部

// 有名字的函数表达式
const sum = function _sum(n) {  
    if (n == 1) return n;
    return n + _sum(--n) // _sum只能内部使用
}
console.log(sum(4));

2. 函数、匿名函数、函数表达式的差异

函数和匿名函数,本质上都是一样的,都是函数对象,只不过函数有自己的标识符——函数名,匿名函数需要借助其它的标识符而已。
区别在于,函数会声明提升,函数表达式不会

// 函数的声明 提升 ,可以先放到 前面
console.log(sum(4))
function sum(n) {
    if (n==1) return 1;
    return n+sum(--n);
}

// 匿名函数
function add (x, y){ // 声明提升
    return x + y;
};
//console.log(sub(5, 3)); //sub未定义
// 有名字的函数表达式
const sub = function (x, y){
    return x - y;
};
console.log(sub(5, 3));

3. 高阶函数

高阶函数:函数作为参数或返回一个函数
完成一个计数器counter

function counter () {
    let c = 0;
    return function(){
        return ++c
    };
};

const c = counter()

console.log(c())
console.log(c())
console.log(c())
#-------------------------------------------------------
1
2
3


// 生成器版本:
function *counter() {
    let c = 0;
    while (1)
        yield ++c;
}

const inc = counter() ; // 生成器对象;
console.log(inc.next())
console.log(inc.next().value) //
console.log(inc.next().value)
#----------------------------------------------------------------
{ value: 1, done: false }
2
3
map函数

完成一个map函数:可以对某一个数组的元素进行某种处理

// ES 262
function map(fn, arr) {
    let newarr = [];
    for (let i=0;i<arr.length;i++) 
        newarr[i] = fn(arr[i])
    return newarr;
}
console.log(map(x => x+10,[1,2,3,4]))
console.log(map(function(x){return x+10},[1,2,3,4]))
#--------------------------------------------------------------------------------------------
[11,12,13,14]

map的生成器实现

var map = function* (fn, arr){
    for (i in arr) 
        yield fn(arr[i]);
};

let newarr = map(x => x + 10, [1, 2, 3, 4]);

for (x of newarr)
    console.log(x);

上一篇 下一篇

猜你喜欢

热点阅读