1. 函数的分类
1.按参数个数划分:有参函数无参函数
2. 按返回值划分:有返回值函数无返回值函数
3.按编写函数的对象划分:自定义函数和系统函数
4. 立即执行函数举例如下:
<script type="text/javascript">
(function(a,b)
{
document.write("a="+a+"<br/>");
document.write("b="+b);
})(123,456);
</script>
**输出结果如下**
5.this函数
总结:1.当以函数形式调用时,this就是window
2.当以方法形式调用时,谁调用方法this就是谁
3.当以构造函数调用时,this就是新调用的那个对象
var name="全局的";
function fun()
{
document.write(this.name);
}
var obj1=
{
name:"杨洋",
sayName:fun
}
var obj2=
{
name:"李易峰",
sayName:fun
}
var obj3=
{
name:"易烊千玺",
sayName:fun
}
fun();//调用它输出全局的
obj1.sayName();//调用它输出杨洋
obj3.sayName();//调用它输出易烊千玺,自己尝试一下去除this后是什么效果
2.函数的建立调用
// 建立
function 函数名([参数1,参数2])//使用[]括起来的是可选部分
{
函数体
}
//调用
函数名();
3.参数说明
实参可以是任何类型,也可以是对象
实参是对象的例子
<script type="text/javascript">
function test(o)
{
alert("我叫"+o.name+"我今年"+o.age);
}
var obj={
name:"杨洋",
age:18
}
test(obj);
</script>
单向值传递,只能由实参传递给形参,不能由形参传递给实参
形参在未调用时不占内存单元,在调用时占内存单元,调用结束后内存单元 自动释放
实参的个数要和形参个数一致,如果实参个数大于形参个数则多余的部分将忽略,如果实参个数小于形参个数则少的部分为undefined举例如下:
<script type="text/javascript">
function test(a,b)
{
alert("a="+a+","+"b="+b);
}
test(10);
<script type="text/javascript">
function test(a,b)
{
alert("a="+a+","+"b="+b);
}
test(10,20,30);
</script>
4.函数的调用方式
1.简单的函数调用
<script type="text/javascript">
function add(a,b)
{
var sum=a+b;
alert("两数相加和为sum="+sum);
}
add(10,20);
</script>
2.在表达式中调用
<script type="text/javascript">
function isyear(a)
{
if((a%100!=0 && a%4==0) || (a%400==0))
{
return a+"是闰年";
}
else
{
return a+"不是闰年";
}
}
document.write(isyear(2018));//在表达式中讲结果输出
</script>
3.在事件响应中调用函数
再点击时调用函数
<p>i=10,j=10;i+j=?</p>
<button onClick="add()">提交</button>
<p id="myid"></p>
<script type="text/javascript">
function add()
{
var i=10,j=10;
var sum=i+j;
document.getElementById("myid").innerHTML=sum;
}
</script>
4.在链接时调用
<a href="javascript:test();">学习JavaScript的好书籍</a>
<script type="text/javascript">
function test()
{
alert("javascrit从入门到精通");
}
</script>
5.什么是调用方法,举例如下
<script type="text/javascript">
var obj=new Object();
obj.name="杨洋";
obj.age=18;
obj.sayName=function()//属性值是函数(方法)
{
document.write(obj.name);//输出结果是杨洋
}
obj.sayName();//称为调方法
</script>
6.构造函数
说明:(1)构造函数和普通的函数基本一样,不一样的是普通函数直接调用,构造函数使用new关键字来调用
(2)使用同一个构造函数创建的对象,我们称之为一类对象,也将一个构造函数称为一个类(在下面的实例中,per,per2,per3都是person类的对象,dog是Dog类的对象)
(3)使用instanceof可以检查一个对象是否是此类的对象如果是返回true,否则返回false
1. 构造函数的执行流程
(1)立刻创建一个新的对象
(2)将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
(3)逐行执行函数中的代码
(4)将新建的对象作为返回值返回
<script type="text/javascript">
function person(name,age,gender)
{
this.name=name;//相当于对象.name=name(对象为per,per2,per3)
this.age=age;
this.gender=gender;
this.sayName=function()
{
alert(this.name);
};
}
function Dog()
{
}
var per=new person("王源",18,"男");
var per2=new person("王俊凯",20,"男");
var per3=new person("易烊千玺",20,"男");
var dog=new Dog();
console.log(dog);
console.log(per);
console.log(per2);
console.log(per instanceof person);//instanceof是用来检查一个对象是否是一个类的实例,如果是返回true,否则返回false
</script>
7.原型对象
<script type="text/javascript">
function person(name,age,gender)
{
this.name=name;
this.age=age;
this.gender=gender;
}
person.prototype.sayname=function()//向原型中添加sayname方法
{
alert("大家好,我是"+this.name);
}
var per=new person("王源",18,"男");
var per2=new person("王俊凯",20,"男");
var per3=new person("易烊千玺",20,"男");
per.sayname();//输出王源
per2.sayname();//输出王俊凯
</script>
8.垃圾回收
当一个对象没有任何的变量或者属性对他进行引用,此时我们将永远无法操作该对象,我们将此类对象称之为垃圾。在JS中拥有自动的垃圾回收机制,会自动的将垃圾从内存中销毁,我们只需要将不再使用的对象设置为null即可
var obj=new Object();
obj=null;