函数
函数语法
function 函数名([形参列表]){
执行代码
}
function add(num1,num2){
var sum = num1 + num2;
return sum;
}
var x = add(2,3);
函数定义的方式有以下三种
1,函数声明
function add(){
}
function add(num1,num2){
var sum = num1 + num2;
return sum;
}
2.函数表达式
var add = function(){
}
var add = function(num1,num2){
var sum = num1 + num2;
return sum;
}
这三种函数定义之间的区别
函数声明与函数表达式,函数实例化的区别
通过函数声明的函数可以在函数声明之前使用,而函数表达式和函数实例化所定义的函数必须在此之后调用
函数实例化的作用域
函数实例化的作用域为全局,所以即便在局部作用域内也不能使用局部作用域内的变量。
3.对象实例化
一般不会在实际编程中应用到
var add = new Funcrion("i", "j", "return(i+j)");
函数参数
实参数量少于形参
function add(number0, number1){
var sum = number0 + number1;
return sum;
}
var x = add(2);//number0=2, number1=undefined;
运行结果可以自己测试一下
实参数量多余形参
function add(number0, number1){
var sum = number0 + number1;
return sum;
}
var x = add(2,3,4);//number0 = 2,number1=3
第三个参数在哪里找呢,其实每个函数里都有一个对象为arguments
它包含一些属性,包括传入的参数值,是以数组的形式存储。
arguments[0]存储的是参数值2,arguments[1]存储的参数值为3,arguments[2]存储的参数值为4,arguments.length为3
所以以上函数可以更改为不定实参数量的求和函数
function add(){
var length = arguments.length,
sum = 0;
parameter;
for(var i = 0; i<lenght; i++){
parameter = arguments[i];
sum = sum + parameter;
}
return sum;
}
add(1,2,3,3,4,5....);
参数为原始类型
相当于C语言中的非指针传值操作,不会改变原始值。
function increment(number){
number = number + 1;
return number;
}
var a = 1;
var x = increment(a);//执行完这句之后呢,x为2;a为1,a只是拷贝了值给参数而已。
参数为对象类型
相当于C语言中的参数是以指针操作的,将更改原始值
function increment(person){
person = person.age + 1;
return person;
}
var jerry = {name:'jerrry', age:1};
var x = increment(jerry);// {name:'jerry',age:2}
jerry;//{name:'jerry',age:2}
构造函数
当调用构造函数时,会产生this这个空对象
原型
function Point(x,y){
this.x = x;
this.y = y;
}
Point.prototype.move = function(stepX,stepY){
this.x += stepX;
this.y += stepY;
};//Point.prototype----原型属性,这个函数能被对歌对象公用
var point = new Point(1,2);
var point1 = new Point(2,4);
point.move(2,2);
point.move(3,5);//move方法在原型中被定义,可以共用。