javascript系列--函数(一)

函数的定义和调用

定义函数的方式包括以下两种

第一种

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

参考 阮一峰博客

原文地址:https://www.cnblogs.com/elian/p/7676519.html