函数
JS没有函数重载,方法名是唯一标示。(传入的参数匹配不上,或不传入参数,程序可以正常执行),如果方法名相同,参数列表不同,后定义的函数会覆盖前面的函数。
1.定义命名函数:
function 方法名(参数){
}
2.定义匿名函数,可以将函数赋值给变量
function(参数){
};
function(参数){
};
a=function(name){
document.writeln(name)
};
a("AAAA")
3.定义Function类匿名函数
a=new Function("name","AAAAAAAAAA","DDDDDDDDD", //参数名称
"document.write(DDDDDDDDD)" //最后一个是方法的执行体,将对应的参数传入(是第三个) )
a("FFFFFFF","DDDDDDDDDA","ddaaaaaaaa") //参数,可以少传入,只要执行体所需的参数在
执行结果:输出ddaaaaaaaa
4.局部函数:在外部函数中定义的函数
在外部函数中定义局部函数,需要手动调用后才执行;直接调用局部函数不执行
function name(name){
function inner1(name){
document.writeln(name+1)
}
function inner2(){
document.write("============")
}
inner2()
inner1(name)
}
name("e");
5.调用方式
(1)直接调用:返回值是方法中return语句返回的对象,没有return不返回
function name(name){
return name
}
var a=name("aaaaaaaaa")
var b=new name("BBB")alert(a+"\n"+b) //aaaaaaaaa
[object Object]
(2)使用new关键字调用:返回的是一个JavaScript对象
6.this关键字
(1)被this关键字修饰的变量不再是局部变量,是该函数的实例变量
将函数赋值给对象需要使用匿名函数,通过对象调用
function name(name){
this.name=name
this.inner=function (){
document.writeln(this.name)
}
}
//创建对象
var a=new name("sAAAAAAAs")
a.inner()
(2)使用命名函数调用,因为没有明确函数附加的对象需要使用window对象
var b=name("DDDDDDDDDD")
window.inner()
区别:是否创建对象–>使用命名函数还是匿名函数
7.实例属性和类属性
实例属性:this,使用对象调用
类属性:使用类调用
function name(N,age){
this.name=N //实例属性
name.age=age //类属性
var bl=0
this.inner=function (){
document.writeln(this.name)
}
}
var a=new name("A",32)
document.writeln(a.name)
document.writeln(name.age)
document.writeln(name.bb) //局部变量无法在函数外调用
打印结果:A 32 undefined
对类属性赋值,相当于给函数的对象添加属性
var a=new name("A",32)
document.writeln(a.name)
document.writeln(a.age)
a.age=40
document.writeln(a.age)
var b=new name("B",1)
document.writeln(b.name)
document.writeln(b.age) //没有给b对象添加属性,所以值为undefined
打印结果:AS undefined 32 40 B undefined
8.函数的参数处理:基本类型、复合类型
JavaScript采用值传递方式,传入的是形参,不会改变参数本身;
传入的是复合类型(对象,数组等),采用的是引用传递(值传递,但是传入的是引用)
9.JS函数没有继承,使用prototype。是修改了原有的类,不是创建了子类,之前的类将不存在。是伪继承机制,对原有类的扩展。
直接写在函数中或者添加方法,性能低,每次创建Person类时系统都会创建新的age函数;函数中如果有变量在外部引用,会造成内存泄漏。
function Person(name){
this.name=name;
}
var a=new Person("aaa")
Person.prototype.age=function(){
document.write("--sssssssss-");
}
a.age();
document.write(a.name);
10.创建对象
使用new
var a=new Person()
使用Object
var a=new Object();
a.name="aaa";//增加属性
a.info=function abc(){
document.write(this.name);
}
使用JSON
var a={
name:"AAAAAAA";
age:"12"
}