函数 和类型
程序员文章站
2022-05-20 15:26:44
...
函数类型
命名函数
function fname(...){...}
function user(a, b) {
return a + b;
}
console.log(user(10, 20));
// 1. `user` 函数的名字
// 2. ` (a, b)` 函数的参数
// 3. `return a + b;` 函数的返回值
// 4. `user(10, 20)` 给函数 user 传值(10,20)
匿名函数
- 匿名函数: 没有名字的函数叫匿名函数
1.函数表达式 const = function (...){...}
-
把函数保存到变量(常量)中 -任何一个可以计算出确定的’值’的过程
-
‘函数声明’,变成了 ‘变量声明’, 只不过,变量的值,是一个函数声明
const getName = function (a) {
return "Hello " + a;
};
console.log(getName("Ianren"));
// 1. `getName` 常量的名字
// 2. ` (a)` 函数的参数
// 3. `"Hello " + a;` 函数的返回值
// 4. `getName("Ianren")` 给常量`getName`的函数 传值("Ianren")
// `let` 定义变量 `const` 定义常量
2.立即执行函数(IIFE)
- 立即执行函数(IIFE) :执行方式 立即执行(声明 + 执行)2 合一 一起执行
- 用完就不用了 一次性,不会给全局环境带了任何污染,用来创建临时作用域
console.log( (function(..){ ... })(...));
console.log(
(function (username) {
return "Hello" + username;
})("Ianren")
);
// 1. 直接把函数写在 `console.log()` 也就是直接调用函数
// 2.`("Ianren")` 是为 `username` 传的值
// ! 也可以写为
(function (username) {
console.log("Hello " + username);
})("Ianren");
3.箭头函数
- 只有一个参数,可以不写括号
(...)
- 只有一条执行语句,可以不写
{}
return 也可不写 - this 与上下文绑定 ,是固定的,所以不能用作”构造函数”来创建对象
let f1 = function (a, b) {
return a + b;
};
console.log(f1(10, 30));
// 使用箭头函数简化
f1 = (a, b) => {
return a + b;
};
console.log(f1(10, 30));
// 1. 去掉 function
// 2. 在参数和{}之间加 =>
f1 = (a, b) => {
return a + b;
};
console.log(f1(10, 30));
// 只有一条 `return `的情况下 `{}` 和 `return` 不写
// 只有一个参数 `()` 也可以不写
f1 = (a, b) => a + b;
console.log(f1(10, 30));
数据类型
原始类型 简单类型
- 不可再分,是构成其他复合类型的基本单元
- 一个变量存一个值
- 数字类型 number 123
- 字符串类型 string “你好”
- 布尔类型 boolean true
- undefined undefined 没有值
- null object 空
引用类型 复合类型
-
是一个典型的:多值类型
const a = [1, "你好", true];
用
[]
包含多个数值,里面的值 用,
分开 -
引用类型,都是对象,默认返回值 object. 函数(function)除外
1.array 数组
-
声明
const a = [1, "你好" true];
-
调用
const arr = [1, "手机", 5000];
console.log(arr);
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
// 数组的索引是从0开始递增的正整数 0, 1, 2, 3,....
// 分别调用值结果为
// console.log(arr); [1, "手机", 5000]
// console.log(arr[0]); 1
// console.log(arr[1]); 手机
// console.log(arr[2]); 5000
// 判断数组类型用`typeof`;
console.log(typeof arr);
console.log(typeof arr[1]);
2.object 对象
- 对象里面可以设置 属性,可以根据属性来调用其属性的值
name
为属性手机
为值
const obj = { num: 1, name: "手机", price: 5000 };
console.log(obj);
console.log(obj["num"]);
console.log(obj["name"]);
console.log(obj["price"]);
// 分别调用值结果为
// console.log(obj); [1, "手机", 5000]
// console.log(obj["num"]); 1
// console.log(obj["name"]); 手机
// console.log(obj["price"]); 5000
// 简化写法
console.log(obj);
console.log(obj.num);
console.log(obj.name);
console.log(obj.price);
//对象中出现非法标识符 必须用 `[]`
obj = { "my email": "admin@php.com" };
console.log(obj["my email"]);
- 对象里面可以设置 属性,可以根据属性来调用其属性的值
name
为属性手机
为值 - 属性类似用变量
2-1.对象里面包含函数
- 属性用
total
设置
let obj = {
num: 1,
name: "手机",
price: 5000,
total: function () {
let str = obj.name + " 总计: " + obj.price * obj.num + "元";
return str;
},
};
console.log(obj.total());
// 简化可以
let obj = {
num: 1,
name: "手机",
price: 5000,
total: function () {
let str = `${obj.name} 总计: ${obj.price * obj.num} 元`;
return str;
},
};
console.log(obj.total());
/// 这里要用反引号 "``" (数字1前面的)
///反引号声明的模板字符串,可以插入变量/表达式.这叫"插值"
2-2.this
- 在对象内部,使用当前对象的一个引用,这样才独立于外部对象
- this :始终与当前对象绑定(执行环境 / 执行上下文)
let obj = {
num: 4,
name: "手机",
price: 5000,
total: function () {
let str = this.name + " 总计: " + this.price * this.num + "元";
return str;
},
};
console.log(obj.total());
let str = this.name + " 总计: " + this.price * this.num + "元";
- 这里面 把
obj
换成了this
,以后可以直接单独改变量名称.
3.函数 function
- 函数即使 函数 也是 对象
- 函数当参数使用,回调
function f1(callback) {
console.log(callback());
}
f1(function () {
return "hello";
});
- 函数当返回值使用 闭包
function f2() {
let a = 1;
return function () {
return a++;
};
}
console.log(f2());
const f = f2();
console.log(f);
console.log(f());
console.log(f());
console.log(f());
console.log(f());
console.log(f());
console.log(f());
- 函数当成对象方法