JS第四章
1、动态的属性
var person=newobject();
person.name=“Nicholas”;
alert(person.name);// “Nicholas”
只能给引用类型值动态的添加属性。
2、复制变量值
var num1=5;
var num2=num2;
两个变量可以参与任何操作而不会相互影响。
Var obj1=new object();
var obj2=obj1;
obj1.name= “Nihao”;
alert(obj2.name);// “Nihao”
复制操作结束后,两个变量实际上将引用同一个对象,因此改变其重要一个变量,就会影响一个变量。(保存到堆内存中,是一个object)
3、传递参数(按值传递)在向参数传递引用类型的值时,会把这个值的地址在内存中的地址复制给一个局部变量,这个局部变量的变化会反映在函数外部。
Functionsetname(obj){
obj.name= “nihao”;
obj=new object();
obj.name=“nibuhao”;
}
var person=newobject();
setname(person);
alert(person.name)// “nihao”
4、检测类型
(1)typeof操作符
eg. alert(typeof s)
(2)instanceof 操作符
result=variableinstanceof constructor
5、执行环境及作用域
作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。作用域前端,始终是当前执行的代码所在环境的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象来自下一个包含环境。本层作用域只能访问本层变量和上层作用域,不能访问下一层的。
6、延长作用域链
function buildurl(){
var qs= “?debug=true”;
with(location){
var url=href +qs;
}
return url;
}
with() 加长作用域链,加在buildurl()函数前面。
7、没有块级作用域
if for内声明或定义的变量会添加到全局变量内。
for(var i=0;i<10; i++){
dosomething(i);
}
alert(i) //10
8、声明变量
使用var 声明变量将会自动添加到最近的环境内。
Eg:
functionadd(num1,num2){
var num=num1+num2;
return num;
}
varresult=add(10,20);
alert(result) //30
alert(sum) //由于不是有效变量,访问不到。
Eg:
functionadd(num1,num2){
sum=num1+num2;
return sum;
}
varresult=add(10,20);
alert(sum); //30
下面的例子没有声明关键词var ,调用完函数后直接添加到全局变量。
9、管理内存
解除引用:一旦数据不再使用,最好通过将其值设置为null来释放其引用。
Functioncreateperson(name){
var localperson=newobject();
localperson.name=name;
return localperson;
}
varglobalperson=createperson( “nihao”);
globalperson=null;