高阶函数
使用函数为参数或者将函数做为返回的函数
function demo(f) {
console.log(f);
return function (){
return "abc" ;
};
}
函数做为参数,这就是回调函数
let a = demo(function ( ){ });
console.log(a);
console.log(a());
//输出 abc
回调函数
document.addEventListener("click", function () {
alert("大家好");
});
返回去向是 document 。
偏函数
是指固定部分已知参数,同时返回一个接受剩余参数的函数。
let sum = function (a,b){
return function (c,d) {
return a + b +c + d;
};
};
let f1 = sum(1,2);
console.log(typeof f1); // 输出:function (f1是一个函数)
console.log(f1(3,4)); //输出10 (1+2+3+4)
柯里化
是把接受多个 参数 的 函数 变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
sum = function (a){
return function (b){
return function (c){
return function (d){
return a + b +c + d;
};
};
};
};
纯函数
在函数内部没有应用外部数据的函数
let a = 100;
function add(b,c){
return b+c;
}
console.log(add(1,2));
// c来自函数外部,不是我自己的
// return a + b +c;
// 去掉c就是纯函数,此时函数的所有参数都必须是通过调用者传入的
箭头函数
// 原先
let sum = function (a, b) {
return a + b;
};
// 匿名函数,可以使用箭头函数来简化它
sum = (a, b) => {
return a + b;
};
console.log(sum(1, 4));
// 如果箭头函数的代码体只有一行语句,可以删除大括号,自带return功能
sum = (a, b) => a + b;
// 如果只有一个参数,连参数列表的圆括号都可以删除
let tips = (name) => console.log("欢迎:" + name);
// ()可加可不加 方便以后查看 name是参数 不是变量
tips("猴子们");
// 如果函数中药使用到this,就不要使用箭头函数,不能当构造函数用
立即执行函数
// 普通函数分两步:声明和调用
// 声明
function sum(a,b){
console.log(a + b);
// 调用
sum(1,2);
// 立即执行函数,声明合二为一,声明后直接执行
(function sum(a, b) {
console.log(a + b);
})(1, 2);
// 分两个括号()()使用,第一个括号放置声明,而第二个括号放置调用的参数即可,
另外
(function ()
{if (true) {
// 一互将代码块用一个立即执行函数套住,那么内部声明的变量b就不断泄露到全局中
var b = 100;
}
})() ;
console.log(b);
// 输出 b is not defined (b在全局中找不到)