- 要创建一个函数,要使用function关键字
- 函数可以是命名函数,也可以是匿名的
- 函数的命名规则与变量命名规则相同
- 函数体放在大括号之间,包含完成函数工作的具体语句
- 函数可以用return语句返回一个值
- 要调用一个函数,需要使用函数名,并传入它需要的所有实参
- javascript使用传值的方式传递函数
- 传递一个对象作为一个实参时,比如dog,形参会得到这个对象引用的一个副本(
function student(name,age,height) { this.name = name; this.age = age; this.height = height; } window.onload = function(){ var man = new student("小明",21,170); alert(man.name); test(man); alert(man.name); }; function test(student) { student.name = "小红"; student.age = 18; }
以上先输出小明,之后输出小红;这与java是类似的,java要实现上面的例子可以这样public class Text { public static void main(String[] args) { Student student = new Student("小明",18,170); System.out.println(student.name); test(student); System.out.println(student.name); } static class Student { String name; int age; double height; public Student(String name,int age,double height) { this.name = name; this.age = age; this.height = height; } } public static void test(Student student) { student.name = "小红"; } }
) - 函数中定义的变量,包括形参,都称为局部变量
- 函数外定义的变量称为全局变量
- 局部变量在定义该变量的函数之外不可见(就是不能使用到那个变量)这称为变量的作用域
- 如果声明一个局部变量时与一个全局变量同名,这个局部变量就会遮蔽全局变量(优先使用局部变量)
- 从页面链接到javascript文件时,所有全局变量都定义在同一个全局空间中。
- 如果赋一个新变量而没有使用var关键字,这个变量就是全局的,即使在一个函数中首次赋值(如果你的变量是声明在函数中的那它的作用域还是在那个函数中,个人不是很理解这句话)
- 函数也是值,可以赋给变量、传递给其他函数、存储在数组中,还可以付给对象属性
- 对象是属性的集合
- 可以使用点记法或中括号记法访问对象的属性
- 如果使用[]记法,要把属性名作为一个串用引号引起来,例如myObject["name"]。
- 可以改变一个属性的值、删除属性(delete people.name)或者想对象增加新属性
- 可以使用一个for-in循环枚举对象的的属性
- 赋给一个对象属性的函数称为方法。
- 方法可以使用一个特殊的关键字this来引用调用这个方法的对象(this就是它本身)
- 构造函数是创建对象的函数
- 构造函数的任务是创建一个新对象,并初始化这个对象的属性
- 要调用一个构造函数创建对象,需要使用new关键字。例如new Dog();
- windows是全局对象(也就是说有的地方你不加windows实际上它自己就帮你加了,比如windows.alert("")==alert(""));
- document是windows的一个属性
- document.getElementById方法会返回一个元素对象。
注意:
- 在写方法的形参时,不需要在参数前加var,就算那个是参数是Array也不需要
- 如果有同名的函数,将使用较后面声明的那个,哪怕是参数不同(这点与java不同)
- 创建对象的时候要注意不同属性之间不是用分号而是用逗号间隔的
var man = { name: "小刚",age: 19 }
- 使用for..in语句遍历的时候要这样
var students = new Array("小明","小强","小红","小白"); for(index in students) { alert(students[index]); }
这里的index是0,1,2.3,不是像java那样直接把姓名取出来得 - 删除对象的属性时,哪怕这个对象根本没有这个属性,他也可以返回一个true
var a = new people("小明","男",19); if(delete a.height) { alert("OK"); } else { alert("No OK"); }
这样输出的是OK,就算people中没有height这个属性