函数的定义和调用
定义函数的方式包括以下两种
第一种
function abs(x) {
if(x >= 0) {
return x;
} else {
return -x;
}
}
定义了一个方法名为abs,参数为x的函数
第二种
var abs=function(x){
if(x >= 0) {
return x;
} else {
return -x;
}
};
定义了一个指向匿名函数的abs变量
调用方式两者相同,都是采用abs(参数)
来进行调用
javascript函数中有一个内置的arguments,可以获取函数调用时输入的所有参数,但是arguments形式类似数组,但并不是数组
function foo(x)
{
console.log(arguments); //输出 [10, 20, 30, callee: ƒ, Symbol(Symbol.iterator): ƒ]
// console.log(arguments.join('-'));//会报错
}
foo(10,20,30);
js的内置filter函数,通常用来删选数组
//筛选出所有的奇数
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function(x) {
return x % 2 !== 0;
});
console.log(r); //输出[1, 5, 9, 15]
//删选掉所用的空字符串
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function(s) {
return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
console.log(r); //输出["A", "B", "C"]
//去掉重复的元素
var arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];;
var r=arr.filter(function(element,index,self){
return self.indexOf(element)===index;
})
console.log(r); //输出["apple", "strawberry", "banana", "pear", "orange"]
接下来讨论一个经常会用到的一个知识点 闭包
闭包简单来说就是可以读取其他函数内部局部变量的函数,并且可以将变量保存在内存中
缺点:滥用闭包会造成内存消耗很大,导致网络性能降低,其次会导致改变函数内部变量的值
function f1(){
// var n=999; //局部变量
n=999; //全局变量
}
f1();
//如果是定义局部变量,在函数外是访问不到的;如果是全局变量,在函数外是可以访问到的,闭包的作用就是解决在函数外访问局部变量的问题
如何从外部访问到局部变量?
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result();
在函数f1()
中f2()
是可以访问到变量n
的,因此将函数f2
返回,就可以在f1
外通过f2
访问到变量n
参考 阮一峰博客