function 函数名 (形式参数列表) {
//函数逻辑实现
return 返回值;
}
const sum = function (形参列表) {
//函数逻辑实现
return 返回值;
};
function dis() {
console.log('hi');
}
console.log(dis());//undefined
function dis(age = 18) {
return age
}
function dis(num1, num2) {
return num1 + num2;//有返回值
}
console.log(dis(1, 2));//3
const sum = (num1, num2) => {
return num1 + num2;
};
const sum = (num1, num2) => num1 + num2;
const sum = (num1, num2) => {
let res = num1 + num2
return res;
};
let double = num1 => num1 * 2;
let sum = () => console.log('hello, world');
btn.addEventListener('click', () => {
console.log(this);//window
})
btn.addEventListener('click', function () {
console.log(this);//具体的事件对象,如按钮 button
})
;(function() {
// 函数体
})();
;(()=> {
// 函数体
})();
; (async () => {
let res = await fetch('https://glpla.github.io/utils/data/coffee.json')
let data = await res.json()
console.log(data)
})();
function fn(n) {
// if (n == 0) {
// return 1;
// } else {
// return n * fn(n - 1);
// }
return n == 0 ? 1 : n * fn(n - 1);
}
function fn(n) {
if (n == 0 || n == 1) {
return 1;
} else {
return fn(n - 1) + fn(n - 2);
}
}
Array.prototype.flat = function () {
let flatArr = []
for (let item of this) {
if (Array.isArray(item)) {
flatArr = flatArr.concat(item.flatArr())
} else {
flatArr.push(item)
}
}
return flatArr;
}
.相同的输入始终得到相同的输出
.大多数的操作都是以数组为对象,所以后续各例都以数组为例
.如果一个函数的执行会修改到数组,则这个函数不是纯函数
.如果一个函数没有参数,那它就不是纯函数
.不会修改外部环境,如全局变量
function cb(fn, para) {
return fn(para);
}
function add(num) {
return num + 10;
}
let res = cb(add, 10);
console.log(res);
. 利用创建私有变量来保护数据、隐藏数据;外部无法直接访问,只能通过内部函数访问
. 尽量少使用全局变量;避免全局变量污染环境
. 通常使用return把内部变量/临时变量,如instance,暴露出去给外部使用
const singleton = (function () {
let instance;
return function () {
if (!instance)
//创建instance
return instance
}
})()
let a;
function fa() {
let tmp = 10;
return function res() {
return tmp;
}
}
a = fa();
console.log(a());
function fb() {
let a = 10;
return function res(inc) {
a += inc;
return a;
}
}
let b = fb();
console.log(b(2));
console.log(b(2));
let fn;
function assign() {
let tmp = 12;
fn = function () {
return tmp;
}
}
assign();
console.log(fn());
let num = 0;
function fn() {
num++;
console.log('fn() done ', num);
return num;
}
fn() fn() done 1 1 fn() fn() done 2 2 fn() fn() done 3 3 fn() fn() done 4 4 num=100 100 fn() fn() done 101 101
function fn() {
let num = 0;
return function () {
num++;
console.log('fn() done ', num);
}
}
let a = fn();
a() fn() done 1 undefined a() fn() done 2 undefined num=100 100 a() fn() done 3 undefined a() fn() done 4 undefined
function sum(num0, num1) {
return num0 + num1;
}
function sum() {
let res = 0;
for (let i = 0; i < arguments.length; i++) {
res += arguments[i];
}
return res;
}
sum(1, 2);
sum(1, 2, 3);
function fn(a, b) {
console.log(fn.length);//2 - 形参个数为2
console.log(arguments.length)//4 - 实际传入4个参数
}
fn(1, 2, 3, 4)