1.命名函数:命名采用动词+名词
// 细说函数
function getName(username) {
return "hello " + username;
}
console.log(getName("小夫"));
2.匿名函数
执行方式有两种:立即执行和函数表达式(保存到变量中)
立即执行函数(IIFE)将声明和执行二合一,阅后即焚不会给全局环境造成任何污染,用来创建临时作用域。
立即执行:
console.log(
(function (username) {
return "good morning " + username;
})("小夫")
);
函数表达式:
const getName = function (username) {
return "hello " + username;
};
函数表达式的简化方案:箭头函数
去掉 function,在(…)与{…}之间使用=>进行连接
const getUserName=(username)=>{
return 'hello '+username
}
如果函数中只有一个参数,()可以省略,如下
const getFirstUsername=username=>{
return 'hello '+username
}
如果只有一条语句,可以不写大括号,因为只有一条语句,默认就是 return,return 也可以省略。
const GET_NAME = i => i * 10;
使用场景: 1.如果函数需要多次调用,用命名,函数表达式都可以 2.如果代码要求,必须遵循“先声明,再调用的原则”,那就必须用“函数表达式” 3.如果只有完成特定的,一次性的工作,不想留下任何痕迹用 IIFE 立即执行函数 4.如果调用函数时需要一个函数充当参数,例如回调,就可以使用箭头函数进行简化匿名函数的声明
数组:
const arr = ["name", 4, 58394];
数组的索引是从 0 开始递增的整数,0,1,2,3……
这样来判断一个数据是不是数组console.log(Array.isArray(array));
对象:更像是一个语义化的数组const shopping = { phone: "智能手机", price: "998" };
可以这么来访问这个对象:console.log(shopping['phone']);
因为对象的属性名都是合法的标识符,可以使用’.’点来访问例如:console.log(shopping.phone,shopping.price);
效果和上方的效果一样。
但是如果对象的属性中出现了非法标识符,我们就必须采用上一种方法了,例如:console.log(shopping["my money"]);
对象最吸引人的不是数组的语义化封装,而是对数据操作的封装,叫做方法(语法与函数一样的)
const shopping = {
phone: "智能手机",
price: "998",
myMoney: "10000",
change: function () {
let change = `买完${this.phone}还剩下${this.myMoney - this.price}元人民币`;
return change;
},
};
console.log(shopping.change());
实际使用中大多数是吧数组和对象组合起来用的
像这样:
const buy = [
{ name: "good1", num: 1, price: 1000 },
{ name: "good2", num: 2, price: 1000 },
{ name: "good3", num: 3, price: 1000 },
];
函数是数据类型的好处
1.可以当成普通值来使用,例如充当函数的参数,或者函数的返回值
2.当参数就是回调函数,当返回值可以创建一个闭包
3.js 中有很多高阶应用,都依赖这两个功能,这也是“高阶函数”的基本特征
4.函数是 js 的一等公民,就是通过这个体现的。
应用场景 1:函数作为参数使用,回调
// 回调
function f1(huidiao) {
console.log(huidiao());
}
f1(function(){return'call back sucess'})
应用场景 2:函数当成返回值,闭包
function f2() {
let i = 1;
return function () {
return i++;
};
}
const f = f2();
console.log(f());
console.log(f());
console.log(f());
console.log(f());
console.log(f());
console.log(f());
函数也可以当成对象来用,对象有属性和方法,函数也有属性和方法。
函数当成对象有啥用?
用处太大了,整个 js 语言体系都靠它撑着
就算是你没学过编程·,至少听说过面向对象编程,对象可以被继承,实现代码复用。
而 js 就是基于原型,实现的继承,而原型,就是在函数上创建一个普通对象而已
class,构造函数他们都是基于函数是对象这个前提的