1. 无return值的函数,返回 undefined
function tttt() {
}
if (tttt() === undefined) {
console.log('undefined111')
}
2. 函数只用名字来限定唯一性
function t1(p1) {
console.log('t1 p1=' + p1)
}
function t1(p1, p2) {
console.log('t1 p1=' + p1 + "p2="+p2)
}
前面那个t1 会被覆盖
3. 调用函数时,参数个数不一定要一致 如果参数多了,函数会忽略 如果参数少了,默认为 undefined
4. 函数内使用 arguments arguments 可以访问函数传入的参数,但不同于数组。可以用 length 来判断个数,以及 下标来访问
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9
5. 用rest 获取多出的参数数组,rest只能放在参数最后面声明
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
结果: a = 1 b = 2 Array [ 3, 4, 5 ]
以下面代码为例:
function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
}
var xiaoming = {
name: '小明',
birth: 1990,
age: getAge
};
xiaoming.age(); // 32, 正常结果
getAge(); // NaN
在一个方法内部,this是一个特殊变量,它始终指向当前对象。 通过 xiaoming 这个对象调用时,this 就是该对象。 而直接调用 getAge() 时,this 就变成全局的 window了。
var fn = xiaoming.age; // 先拿到xiaoming的age函数
fn(); // NaN
上面的用法也是不行的,必须要指定调用哪个对象的 age 函数。
this指针只在age方法的函数内指向xiaoming,如果是 age 方法内的方法里,则又指向全局window了,参考下例:
function getAge() {
function getAgeFromBirth() {
var y = new Date().getFullYear();
return y - this.birth;
}
return getAgeFromBirth();
}
var xiaoming = {
name: '小明',
birth: 1990,
age: getAge
};
xiaoming.age(); // NaN
因为在getAge 的 getAgeFromBirth 里,this已经不再指向调用方法的对象了。 可以如下修改:(用一个临时变量 that 来保存this指针即可)
function getAge() {
const that = this;
function getAgeFromBirth() {
var y = new Date().getFullYear();
return y - that.birth;
}
return getAgeFromBirth();
}
Apply和call 能指定函数的调用对象,以让this 指针指向我们需要的对象。 以上面的 xiaoming 为例。
let tmpAge = xiaoming.age;
tmpAge.apply(xiaoming, [])
tmpAge.call(xiaoming)
Apply和call 的区别在于函数参数的传递方式,apply用的是数组,而 call是依次传入
Map 就是把数组的每个元素 用传入的函数处理后 ,将返回的新元素组成新数组。 PS: 传入的函数 只接收一个参数,且必须有返回值。 样例代码:
[1,2,3].map(function(x) {
return x + 1;
}) //返回 [2,3,4]
Reduce 的函数参数 接收两个参数,分别为 上次两个元素的计算结果 和下一个元素。(如果是首个元素,那参数就是第一个和第二个元素) [1,2,3].reduce((a, b) => a+b) //结果是6, 也就是 (1+2) + 3 [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
Filter 传入一个三参数(element, index, array)的函数,用以决定当前index的元素是否需要保留在返回的新数组里。 样例代码:(返回奇数数组)
[1,2,3].filter( function (ele, i, array) {
return eye % 2 == 1;
});
every() 方法可以判断数组的所有元素是否满足测试条件。
var arr = ['Apple', 'pear', 'orange'];
console.log(arr.every(function (s) {
return s.length > 0;
})); // true, 因为每个元素都满足s.length>0
find() 方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined
findIndex() 和find() 类似,也是查找符合条件的第一个元素,不同之处在于findIndex()会返回这个元素的索引,如果没有找到,返回-1: