函数类型
// 命名函数
function sum(a, b) {
return a + b;
}
console.log(sum(1, 2));
// 匿名函数
// 立即执行 IIFE
(function (a, b) {
console.log(a + b);
})(1, 3);
// 函数表达式
let f;
f = function (a, b) {
return a + b;
};
console.log(f(1, 2));
// 箭头函数
// 1. 去掉 function
// 2. 在参数括号(...) 与 大括号{...} 之间使用 胖箭头 => 连接
f = (a, b) => {
return a + b;
};
console.log(f(1, 2));
// 如果只有一条语句,return ,可以不写大括号
// 因为只有一条语句,默认就是return ,所以 return 也可以不写的
let f1;
f1 = (x) => {
return x * 2;
};
f1 = (x) => x * 2;
console.log(f1(40));
console.log(f1(90));
// 没有参数时, 括号一定要写上
f1 = () => "今天天气很好";
console.log(f1());
数据类型
// 原始类型
// 不可再分, 是构成其它复合类型的基本单元
// * number, string, boolean, undefined, null
// typeof 查看类型
console.log(typeof 2);
// 引用类型
// 引用类型, 都是对象, 默认返回 object ,函数除外(返回function)
// array, object, function
// 数组 array
let a = [1, 2, "aaa"];
console.log(a[2]);
// 判断数组类型的正确方法
console.log(Array.isArray(a));
// 对象 object
let o = { name: "aa", sex: "f", age: 20 };
console.log(o["sex"]);
console.log(o.name);
let human = {
name: "aa",
sex: "f",
age: 20,
who: function () {
// 反引号声明的模板字符串, 可以插入变量/表达式, 这叫"插值"
let j = `姓名:${this.name} 性别:${this.sex} 年龄:${this.age}`;
return j;
},
};
console.log(human.who());
// 函数 function
// 函数是一种数据类型 , 并且 还是 对象
console.log(typeof function () {});
// 函数即是函数, 也是对象
console.log(function () {} instanceof Object);
// 函数是数据类型的好处
// 可以当成普通值来使用, 例如充当函数的参数,或者函数的返回值
// 如充当函数的参数,就是回调函数,
// 如充当返回值,可以创建一个闭包
// 函数做为参数使用, 回调
function f1(callback) {
// 参数 callback 是一个函数
console.log(callback());
}
// 调用f1, 匿名函数当成f1的参数
f1(function () {
return "Hello word";
});
// 函数当成返回值, 闭包
function f2() {
let a = 1;
return function () {
return (a = a + 1);
};
}
// f2()返回值是一个函数
console.log(f2());
const f = f2();
console.log(f());
console.log(f());
// 以下是函数当成对象来用
// 对象有属性和方法, 当然函数也有属性有方法
function func(a, b) {
return a + b;
}
// 查看函数名
console.log(func.name);
// 查看函数需要几个参数
console.log(func.length);
func.att = "函数的属性";
console.log(func.att);