1. 命名函数
2. 匿名函数
- 没有函数名的函数
function (){…..语句}
// 1. 命名函数
// - 有函数名的函数
// - 命名:动词+名词
function getAdd(Add) {
return "我家在" + Add;
}
console.log(getAdd("香港"));
// 2. 匿名函数
// 执行方式一:立即执行( IIFE ),在函数后面加()直接调用
// IIFE: 阅后即焚, 不会给全局环境带来任何的污染,用来创建临时作用域
(function (Add) {
console.log("我最喜欢的城市是" + Add + "!");
})("南宁");
// 执行方式二:保存到变量(常量)中
const getHome = function (Add) {
return "我住在" + Add;
};
console.log(getHome("广西"));
// 3.箭头函数:使用箭头函数来简化匿名函数
// 用法:支掉function,在括号与大括号之间用=>连接
let getMyAdd = (Add) => {
return "我是" + Add + "人。";
};
console.log(getMyAdd("北京"));
// 只有一个参数时括号可以不用,上面可写为:
// let getMyAdd = Add => {return "我是" + Add + "人。"};
// 如果只有一条语句,默认就是return ,所以 return 也可以不写的,如下:
let m3 = (a) => a * a * a;
console.log(m3(15));
// 没有参数时,要写括号,如下:
let Home = () => "上海";
console.log(Home());
Home = (_) => "天津";
console.log(Home());
3. 函数使用场景
- 如果函数需要多次调用, 用命名, 函数表达式, 都可以
- 如果代码要求,必须遵循”先声明, 再调用”的规则, 那就必须用”函数表达式”
- 如果只有完成一些特定的,一次性的工作, 不想留下任何痕迹, 用”IIFE”, 模块
- 如果调用函数时,需要一个函数充当参数,例如:回调, 就可以使用箭头函数来简化 匿名函数的 声明
4. 数据类型
- (1)原始类型
-
-
-
-
- null:空
原始类型是构成其它复合类型的基本单元。
- (2)引用类型
-
- 其数据由一个或多个相同或不同的原始类型数据值构成。
4.1 数组
// 声明数组,数组用[]符号
const Add = ["南宁", "北京", "上海", "重庆"];
// 数组的索引从0开始
console.log(Add[0]);
console.log(Add[1]);
console.log(Add[2]);
console.log(Add[3]);
// 判断数组类型
console.log(Array.isArray(Add));
4.2 对象
// 为了更直观的表示数据之间的关联,可将数字索引换为有意义的字符串。
// 对象:更像一个语义化的数组。用{}符号
let wang = { Name: "王小二", Age: 18, Height: 185, Weight: 135 };
// Name, Age等叫对象的属性
console.log(wang); // 显示:{ Name: '王小二', Age: 18, Height: 185, Weight: 135 }
console.log(
wang["Name"] +
"今年" +
wang["Age"] +
"岁,身高" +
wang["Weight"] +
"cm,体重" +
wang["Weight"] +
"KG。"
);
// 对象的属性是合法的标识符时,可用“.”符号来访问
console.log(wang.Name + wang.Age + "岁");
// 对象的属性是非法标识符时,必须用数组方式访问
wang["Home Email"] = "abc@163.com";
// wang = { "Home Email": "abc@163.com" };
console.log(wang["Home Email"]);
wang.driver = function (mobile) {
return wang.Name + "在开" + mobile;
};
console.log(wang.driver("飞机"));
穿插介绍知识点:模板字面量(重要!以后常用)
5. 再次复习函数
- 函数是一种数据类型,并且还是对象
- 函数是数据类型的好处?
- 可以当成普通值来使用, 例如充当函数的参数,或者函数的返回值。我的理解是只要是普通值可用的地方,就可用函数。
- 这个很重要, 当参数,就是回调函数, 当返回值,可以创建一个闭包。(还不够理解)
- js中很多高级应用, 都严重依赖这二个功能, 这也是”高阶函数”的基本特征
-
- 函数像对象一样,有属性和方法
// 函数
// 应用场景一:作为参数使用,即回调函数
// 定义函数,其参数是函数
function f1(f2) {
console.log(f2());
}
// 调用函数f1,传入匿名函数
f1(function () {
return "我在学习php。";
});
// 应用场景二:当成返回值,即闭包
function n() {
let a = 1;
return function () {
return a++;
};
}
console.log(n()); // 返回的是匿名函数function () { return a * 2; }
console.log(n()()); // 执行返回的函数
let f = n();
console.log(f());
console.log(f());
console.log(f());
// 函数当成对象使用,即可用“.”符号调用
function z(Add, Age) {
return `小王住在${Add},他${Age}岁了。`;
}
// 查看函数名
console.log(z.name);
// 查看函数有几个参数
console.log(z.length);
// 给函数添加数据
z.Height = 193;
console.log(z.Height);
// 函数也是对象
console.log(z.prototype);
函数当成对象有啥用呢?
- 用处太大了, 整个JS语言体系就靠它撑着了。
- 函数就是对象。
- 后面要学到的类class,构造函数, 他们都是基于”函数是对象”这个前提的