首页 > 代码库 > JS函数
JS函数
1、JS中函数的定义方法
function fun_1(){}
var fun_1 = function(){}
前者在第一次执行声明时放到代码树顶端以供调用,后者在解析器执行到所在代码行才会进行解析
函数定义作为对象的属性,称之为对象方法;函数若用于创建新的对象,称之为构造函数
2、函数重载
可以为一个函数编写多个定义,只要这些定义的签名(接收的参数类型和参数个数)不同。
ECMAScript中禁止函数重载。ECMAScript中函数没有签名的概念,其参数一一个包含0或多个值组成的数组形式进行传导(arguments与数组类似,但不是Array的实例)
arguments.length属性返回函数调用过程中接收到的参数个数(无论函数运行过程中是否调用了传入的参数)
function fun_1(a, b, c){
var y = a + b;
alert(arguments.length);
//arguments[0] = a
//arguments[1] = b
//arguments[3] = undefined
}
window.onload = function(){
fun_1(2, 9, 5); //3
}
此外,无须匹配所有传入的参数
function fun_1(a, b, c){
var y = a + b;
alert(y);
}
window.onload = function(){
fun_1(2, 9); //11
}
3、在函数内部生命了全局变量,如果要在函数外访问,至少要运行一次函数,否则无法访问到。
function fun_1(){
a = 99;
}
window.onload = function(){
fun_1();
alert(a);
}
4、this的指向
(1)函数作为全局对象
当函数没有被自身的对象调用时,this的值为全局对象window
function fun_1(){alert this;} //返回window对象
(2)函数作为对象方法调用,this指向对象本身
(3)函数作为构造函数
若函数构造前使用了new关键字,则是调用了构造函数
function fun_1(a, b){
this.name = a;
this.age = b;
}
var obj_1 = new fun_1("fftu", 26);
alert(obj_1.name + "---" + obj_1.age);
*构造函数的调用会创建一个新对象,继承构造函数的属性和方法
5、自调用函数
(function fun_1(){
alert("haha");
})();
6、prototype属性
直接向构造函数添加属性和方法
function employee(name,job,born){
this.name=name;
this.job=job;
this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
employee.prototype.salary=null;
bill.salary=20000;
7、无须指定函数的返回值,ECMA中的函数可以在任何时候返回任何值
JS函数