变量只有两种,基本类型和引用类型
基本类型的值放在栈内存中,引用类型的值放在堆内存中
基本类型有:Undefined、Null、Boolean和String
引用类型:Object
1、基本类型分别操作,互不影响
var box="lee" var box2=box; box2="kkk"; alert(box2); //kkk alert(box); //lee
2、引用类型指向同一个地址
var box=new Object(); box.name="lee"; var box2=box; box2.name="cc" alert(box2.name); //cc alert(box.name); //cc
3、传递参数,参数都是按值传送的,没有类型之分
function box(num){ num+=10; return num; } var num=50; alert(box(num)); //60 alert(num); //50
4、参数作为引用类型的例子
function box(obj){ obj.name="lee"; var aa=new Object(); aa.name="kkk"; } var cc=new Object(); box(cc); alert(cc.name); //lee
5、全局变量和局部变量
全局变量就是window,所以全局变量都是window下的属性,可以用window.来访问
var box="lee"; function serBox(){ var box="red"; //这是局部变量,他们的范围在serBox()里,出来就不认识了 } alert(box); //"lee" serBox(); alert(box); //"lee"
但是如果要是去掉var就变成全局的了
var box="lee"; function serBox(){ box="red"; //没有初始化,又调用的全局的 } alert(box); //"lee" serBox(); alert(box); //"red"
如果传参,作用域也在局部
var box='lee'; function serBox(box){ alert(box); } serBox('red'); alert(box);
函数体内包含函数,只有这一层才能访问局部函数
var box='lee'; function serBox(){ function setColor(){ //setColor()作用域在serBox()内 return 123; } return setColor(); } alert(serBox()); //123
var box='lee'; function serBox(){ return setColor(); function setColor(){ //setColor()作用域在serBox()内 var b="kkk"; //b的作用域在setColor()里 alert(b); return 123; } } alert(window.serBox()); //kkk 123
在变量查询中,访问局部变量要比全局变量要快,因为不需要向上搜索作用域
var age=28; function box(){ //var age=26; 如果有他,打印26,一旦查询到,不会继续向上查找 return age; } alert(box()); //28