JavaScript函数的一些用法总结
函数(Function)
一、定义
JavaScript 使用关键字 function 定义函数。具体定义情况如下:
function name(参数 1, 参数 2) {
代码块
}
定义函数可以有以下两种形式:
function fnName(){
代码块
}
var fnName=function(){
代码块
}
二、参数,返回值
函数的参数列表是可变的,数据类型也均是任意类型,arguments可以访问传到函数内部所有的参数。
arguments是一个对应于传递给函数的参数的类数组对象,该对象是所有函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。
我们可以通过类似与访问Array的方式来访问参数,例如:
arguments[0]//函数第一个参数
arguments[1]//函数第二个参数
arguments[2]//函数第三个参数
虽然arguments对象与Array对象很相似,但它并不是一个Array对象,所以也就没有Array对象所对应的属性,值得一提的是,它有一个length属性与Array相同。
我们可以通过Array.from()方法把arguments对象转换成为一个真实数组。
以下是一个arguments对象用法实例:
function addition() {
var count =0,
len = arguments.length;
for(var i=0; i<len; i++){
count += arguments[i];
}
return count;
}
addition()
addition(1)
addition(1,2,3,4);
输出结果分别为0,1,10。即参数不定量,可根据自己的输入进行改变,有点类似于C++的重载函数。
当函数没有明确的返回值时,返回undefined,有返回值则返回。
三、动态函数
JavaScript支持用户创建动态函数。
先说明一下动态函数的必要性,由于在js中,经常会使用到函数,普通函数虽然很方便,但是,形式略显复杂,特别是代码量大的时候,会大大增加js代码的长度和复杂性,这时,我们可以使用动态函数,动态函数形式比较简洁,并且比普通函数表达式更灵活。
其基本结构如下:
var f1=new Function(x,x1,x2,x3……函数体);
//具体例子
var f1=new Function('aaa',"alert(aaa)");
//调用
f1('hello');
//运行结果为弹出对话框hello
这里需要注意Function和function的区别,function是js里的一个标识符,而Function是js中的构造函数,在构造函数中必须传入String格式,所以说如果我写成
var f1=new function('aaa',"alert(aaa)");
该代码执行时会报错:Uncaught SyntaxError: Unexpected token return,就是因为需要传入的参数应为String类型。
四、函数的属性和方法
1.length属性。length属性表示一个函数期待接收的命名参数的个数,示例如下:
function s1(){
alert("s1");
}
function s2(x){
alert(x);
}
function s3(x1, x2){
return x1 + x2;
}
alert(s1.length);
alert(s2.length);
alert(s3.length);
执行结果为0,1,2
2.apply()方法和call()方法
这两个方法均用在特定的执行环境中调用函数
apply()方法接收两个参数:一个是在其中运行函数的执行环境,另一个是参数数组。
call()方法,第一个参数与apply()方法相同,其余参数都直接传递给函数,也就是说传递给函数的参数必须逐个列举出来。
apply()和call()方法强大之处在于可以扩充函数赖以运行的作用域,而且不需要对象对该方法有任何的耦合关联。
使用这些方法可以实现继承,具体示例如下:
function people(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
function women(name){
people.call(this, name);
}
var women = new women("CoCo");
women.showName();
//弹出对话框coco