arguments关键字
/*
arguments关键字:只能在函数里面使用(系统产生的)
arguments代表的结果:伪数组(可以当数组用:有length,也可以循环遍历)
//arguments解决问题:不限定用户的实参的时候,通常会在函数使用arguments来获取所有的真实数据,并且进行遍历操作
*/
function sum() {
let res = arguments[0];
for (let i = 0; i < arguments.length; i++) {
res += arguments[i];
}
return res;
}
console.log(res);
/*
arguments变量只是"类数组对象",并不是一个数组。称其为类数组对象是说它有一个索引编号
和length属性。尽管如此,它并不拥有全部的Array对象的操作方法。
*/
// 自调用函数
(function (){
let a = 10;
let b = 20;
return a + b;
})();
/* 自调用函数:将函数定义在函数里面,并且可以直接触发代码的执行
语法规则
(函数定义)(); // 后面这个括号是用来调函数
*/
// 回调函数:一定是把函数当做参数传递给另外一个函数
// 回调函数在传参的时候:一定不要加() c(a)这是回调
// c(a()) 将a函数执行完得到返回值,将返回值赋值给c的形参
// 需求:已经有函数能够求平方和立方,另外一个函数可以让用户指定求两个数的和(可以是平方,可以是立方)
// 1. 有函数能够求平方和立方
function pow(num) {
// 返回数的平方
return num * num;
}
function cube(num) {
// 返回数的立方
return Math.pow(num, 3); // 等价于 :num * num * num
}
// 2.另外一个函数:求两个数的和
function sum(a, b, fn) {
// 利用回调函数,对具体的数据进行加工后再处理
return fn(a) + fn(b);
}
let res = sum(2, 3, pow); // 求 2和3的平方和
console.log(res);
// 匿名回调:只能调用一次
console.log(sum(2, 3, function (num) {
return Math.pow(num, 5);
}));
// 有名与匿名回调的优缺点
// 有名:优点:可以反复回调,缺点:会一直占用内存
// 匿名:优点:用后即焚,缺点:只能调用一次
对象
语法
let 变量 = {},空对象
对象里面的元素:属性,属性的组成与数组一样:由下标(属性名)和值组成(属性值),需要使用" : "分开
对象对比数组:拥有更强的语义性,属性名是字符串,数组的下标是数字
let obj = {
name: "犬夜叉";
age: 18;
skill: "爆流破";
}
// 对象的特点1:属性名,可以使用引号
let obj1 = {
"name": "犬夜叉";
"age": 18;
"skill": "爆流破";
}
// 对象的特点2:属性名,可以是数字
let obj2 = {
0: "犬夜叉";
1: 18;
2: "爆流破";
}
// 对象的访问方式:
console.log(obj.name);
console.log(obj1["age"]);
console.log(obj2[2]); //一般不会使用中括号的形式访问对象元素,某些特定的情况下,只能使用这个
// 有个变量
let i =1;
console.log(obj2.1); // undefined
// 上面.语法不会把i当做变量解析,只会当做真正的属性名
console.log(obj2[i]); // 只有中括号可以真正解析变量
遍历对象
/*
for(let key in 对象){
key自定义的变量:保存的是对象中的每个属性的名字
访问对象的属性:对象[key]
}
*/
for(let key in obj){
console.log(obj[key]); // 每个属性的属性值
}