函数基础篇1
来源:互联网 发布:已有淘宝账号怎么开店 编辑:程序博客网 时间:2024/05/16 17:00
1、函数的结构:
函数名、圆括号中包含的0个或多个形式参数、包含在花括号中的方法体
2、函数体中可有可无return语句,return 语句能够结束函数的运行。若return后无表达式或函数体中不包含return语句将返回一个undefined
3、嵌套函数:被嵌入的函数有可能只出现在嵌入函数的顶层,也就是说不能出现在语句块中,例如if、while等语句,这样的限制只针对function定义的函数,对于函数直接量无效,当然不同版本的js对嵌入函数定义的位置要求可能不同
4、函数直接量
function f(x){ //函数
return x*x;}
var f=function(x){ //函数直接量
return x*x:
};
var f=function fact(x){ //命名了名称的函数直接量,函数引用存储在了f中,而未存储在fact变量中,只是允许函数体用if(x<=1)return 1; //这个名字来引用自身
else return x*fact(x-1);
};
5、函数直接量一般用于使用一次而无需命名的函数
f[0]=function(x){return x*x;};//用函数直接量给数组元素或类似数组元素对象赋值
a.sort(function(a,b){return a-b;});//用函数直接量给形参赋值
var tensquared=(function(x){return x*x})(10);//定义调用函数直接量,实质上这是闭包的形式
6、函数命名:函数常用动词命名或以动词开头,首字母要小写,单词与单词之间用下划线或第二个单词首字母大写
7、函数参数:因js是宽松类型的,不能给函数的形式参数指定类型,向函数传递任意类型参数都是合法的,而且js也不会检查传递参数个数是否正确:若传递参数的个数多余形参个数,多余的参数将被忽略,若少于将补以undefined
8、可选参数:函数参数可选的并且调用的时候可以忽略他们,同时在定义的时候应给予合理的默认值
function copy(0,a){
a=a||[];
for(var property in o) a.push(property);
return a;
}
var a=copy(o);//因未给a传值,将采用空数组
copy(p,a);
同时注意:可选的参数只能定义在参数列表尾部
9、可变长度的参数列表:函数内部的arguments具有特殊的含义,引用Arguments对象的一个特殊属性。Arguments是一个类似数组的对象,可以通过数目(而非名字)获取传递给函数的参数值;Arguments对象的callee属性引用当前正在执行的函数
function max( ){
var m=Number.NEGATIVE_INFINITY;
for(var i=0;i<arguments.length;i++){
if(arguments[i]>m){
m=arguments[i];
return m;
}
}
var largest=max(1,10,100,2,3,6);
Argument对象非同寻常特性:当函数具有了命名参数的时候,Arguments对象的数组元素是存放函数参数局部变量的同义词
function f(x){
print(x); //打印最初的x值
arguments[0]=null;
print(x); //打印null
}
callee属性应用:递归调用
function(x){
if(x<=0) return 0;
return x+arguments.callee(x-1);
}
10、把对象属性用作函数参数:当一个函数需要多个参数,对于程序员记住参数的顺序变得困难了,采用名字/值对的方式传递是个好办法
function copy(form,from_start,to,to_start,length)
function toCopy{
copy(args.form,args.from_start||0,args.to_start||0,args.length);
}
11、参数类型:js是宽类型语句,对于函数的参数不必指定类型,对传递过来的实际参数也不作类型检查,在注释中给出需要的类型是个好做法
function(/*number……*/)//无限多个number型参数
自定义代码中,一般检查参数类型以免传递的是不需要的类型而发生异常
function sum(a){
if((a instanceof Array)||(a&&typeof a=="Objec"&&"length"in a)){
var total=0;
for(var i=0;i<a.length;i++){
var element=a[i];
if(!element)continue;
if(typeof element =="number")total+=element;
else throw new Error("sum():elements must be numbers");
}
else throw new Error("sum( ):argument must be an array");
}
12、函数作为数据
用函数赋值:
function square(x){ //定义一个函数对象,并把这个对象赋给square变量,函数变量是用来引用函数的名字
return x*x;
}
var a=square; //a同样引用函数对象
var o=new Object();
o.square=function(x){ //把函数直接量赋给了对象的属性
return x*x;};
y=o.square(16);
var a=new Array(3);
a[0]=function(x){return x*x;};//函数直接量作为数值赋给了数组元素,a[0]引用了函数对象
a[1]=20;
a[2]=a[0](a[1]);
函数用作参数:
计算:(2+3)+(4*5)
function add(x,y){return x+y;}
function subtract(x,y){return x-y;}
function multiply(x,y){return x*y;}
function divide(x,y){return x/y;}
function opertae(operator,operand1,operand2){
return operator(operand1,operand2);
}
var i=operate(add,operate(add,2,3),operate(multiply,4,5));
var operators={
add:function(x,y){return x+y;},
substract:function(x,y){return x-y;},
multiply:function(x,y){return x*y;},
divide:function(x,y){return x/y;}
}
function opertate2(op_name,operand1,operand2){
if(typeof operators[op_name]=="function")
return operators[op_name](operand1,operand2);
else throw "unknow operator";
}
同样可计算:
var j=operatef2(add,operate2(add,2,3),operate2(multiply,4,5));
13、作为方法的函数:方法只不过是存储在对象的属性中,并且通过对象调用的js函数
var calculator={
operand1:1,
operand2:1,
compute:function(){
this.result=this.operand1+this.operand2;//this被传到嵌套方法中,指代函数对象本身
}
}
注:当函数作为函数而非方法,那么this指代全局对象
14、length属性:arguments数组length属性指代实际传递参数个数;Function的length是指参数列表中元素个数
- 函数基础篇1
- Python基础-函数[1]
- JavaScript函数基础1
- Python基础笔记(1):函数篇(1):关于函数参数
- VBS基础篇 - 内置函数 - String 函数
- VBS基础篇 - 内置函数 - Array 函数
- VBS基础篇 - 内置函数 - Math 函数
- VBS基础篇 - 内置函数 - Format 函数
- VBS基础篇 - 内置函数 - DateDiff 函数
- VBS基础篇 - 内置函数 - 其他函数
- C++---基础篇(函数)
- JavaScript程序设计基础篇:函数
- python之函数基础篇
- VBS基础篇 - 常用函数
- VBS基础篇 - 内置函数
- Scala 之 函数----基础篇
- python基础之函数篇
- IOS基础--CG函数篇
- 标准C / C + +运行期库原先并不是设计用于多线程应用程序的唯一一个例子
- 属性
- 7月23日,JXD办公室。
- 云计算模式
- 线段树
- 函数基础篇1
- CRM2011 脚本
- 关于java中double相加的问题
- SCM软件配置管理 (一)SVN 与 CVS
- C#中 Const 、readonly、static 之间的差别和关系
- mount --bind挂载功能,避免ln -s链接的不足。
- HPP
- C++中的字符串
- PowerManager.WakeLock的使用