1.1 函数定义
//单个参数(对象参数)
function pritprops(o){
for(var p in o)
console.log(p+":"+o[p]+"\n");
}
//多个参数(计算两个笛卡尔坐标之间的距离)
function distance(x1,y1,x2,y2){
var dx = x2 - x1;
var dy = y2 - x2;
return Math.sqrt(dx*dx + dy*dy);
}
//递归函数,调用自身的函数(计算乘阶)
function factorial(x){
if(x <= 1) return 1;
return x * factorial(x-1);
}
//把函数赋值给一个变量
var square = function(x){return x*x;}
//函数表达式可以包含名称,递归时很好用
var f = function fact(x){
if(x <=1) return 1;
return fact(x-1)*x;
}
//函数表达式也可以作为参数传递给其他函数
data.sort(function(a,b){return a-b;});
//函数定义后直接运行
(function(x){alert(x);}(10));
var tensquared = (function(x){alert(x);})
//嵌套函数
function hypotenuse(a,b){
function square(x){return x*x;}
return Math.sqrt(square(a)-square(b));
}
1.2 函数调用
共有四种调用方式:
- 作为函数
- 作为方法
- 作为构造函数
- 通过它们的call()和apply()方法间接调用
//作为函数调用 (代码全文通用)
pritprops(10);
var total = distance(0,0,1,3) + distance(2,3,4,4);
var probabilly = factorial(5)/factorial(3);
//作为方法调用
var calulator = {
operand1:1,
operand2:1,
add:function(){
//相当于声明了一个result
this.result = this.operand1 + this.operand2;
}
};
calulator.add(); //2
calulator.result; //2
//更复杂的访问表达式
customer.surname.toUpperCase(); //调用customer.surname的方法
f().m(); //调用f()返回的方法m()
//构造函数调用
var o = new Object();
var o = new Object;
注:如果构造函数里有实参,则它与普通函数的调用时一样的。但如果没有它则是作为一个新对象初始化上下文。