形参(parameter):就是函数定义时的属性名称
实参(argument):实际调用函数时传的值
如
function bark(dogName, dogWeight){}这是形参
bark("Fido",50);这是实参
局部变量(local):
全局变量(global):
1 作用域不同,
2 局部变量可以遮蔽全局变量
3 假如函数内不用var就对一个未声明过的变量赋值,就会成为新的全局变量
4 不同js文件中的全局变量会在同一个作用域
函数可以作为值赋给变量,
function init(){
alert("aaa");
}
window.onload=init;
//window.onload=init用于页面加载之后再执行该函数,实际上就是因为这个函数作为值传给了window的onload属性
对象:实质上就是属性的集合
对象可以用dot notation和 [""] notation访问,比如fido.weight和fido["weight"]都是在访问weight属性
对象可以改变属性的值,赋值fido.weight = 27;
可以枚举对象的所有属性,用for-in循环,比如for prop in fido,不过prop遍历的是属性的名称,fido[prop]才是属性的值
可以处理对象的数组,改变数组比改变属性的值更复杂,用for循环可以循环处理数组。注意:假如返回或打印时需要显示数组中的每一个值,要用+=,假如只需要数组的最后一个值,才可以用=。
向函数传入一个对象,就是把实参代入函数。
tip:要增加一个对象的新属性,直接为新属性赋值即可(无需定义这个新属性,fido.age=5);同理,直接删除某个属性,不止是删除值,也会删除这个属性(delete fido.age,删除成功后这个式子会返回true,删除后再调用这个属性会返回undefined)
向函数传入对象
函数本身有形参,将实参传入时,传递的是一个副本,不是实参本身,只是实参的一个pointer(指针),然后这个引用的副本传递给形参。
实参的调用不会影响函数的形参,但是形参在函数中的运算发生改变时,实参调用函数时所进行的运算也会随之改变
chaining串链
对象也可以有行为method,就是对象里面可以包含一个函数;对象里面的函数引用对象内部的属性,要用this;对象内部只能有匿名函数
function Movie(title,genre,rating,showtimes){
this.title=title;
this.genre=genre;
this.rating=rating;
this.showtimes=showtimes;
this.getNextShowing = function (){
var now = new Date().getTime();
for (var i=0;i<this.showtimes.length;i++){
var showtime=getTimeFromString(this.showtimes[i]);
if((showtime-now)>0){
return "Next showing of " + this.title + " is " + this.showtimes[i];
}
}
};
}
alert(banzaiMovie.getNextShowing());
中间省略了一段,函数作为对象属性之一(方法)时,调用其实是调用对象这一个属性(方法)。
构造函数(constructor):规定好对象的各属性的初始值;只要new object("property", "property"),就可以源源不断调用这个构造的函数,不需要每次都去创建数组。
Object |
window(全局对象) |
document |
element |
property |
location status inload document |
domain(提供文档服务的域) title URL |
innerHTML childElementCount firstChild |
Method |
alert prompt open close setTimeout setInterval |
getElementById getElementsByTagName getElementsByClassName
createElement |
appendChild insertBefore setAttribute getAttribute |