变量、作用域及内存 instanceof
基本类型和引用类型:
function box(obj){ //这里将要传递一个引用类型的参数,但不是按引用传递,是按值传递
obj.name='Lee';
var obj=new Object(); //所以,JS没有按引用传参的功能,切记,不能把传递引用参数当作按引用传参
obj.name='kkk';
}
var obj=new Object();
box(obj);
alert(obj.name);
----------------------------------------------------------------------------------------------------
instanceof 检测引用类型
var box=[1,2,3];
alert(box instanceof Array);
var box2={};
alert(box2 instanceof Object);
var box3=/g/;
alert(box3 instanceof RegExp);
----------------------------------------------------------------------------------------------------
执行函数和作用域:
最外围的执行环境:
var box='Lee';
function setBox(){
return 123;
}
alert(window.box); //'Lee' 全局变量,最外围,属于window属性
alert(window.setBox()); //'123' 全局函数,最外围,属于window方法
---------------------------------------------------------------------
var box='Lee';
function setBox(box){ //通过传参,也是局部变量,作用域在setBox()范围下
alert(box);
}
setBox('red');
alert(box);
---------------------------------------------------------------------
var box='Lee';
function setBox(box){
function setColor(){ //setColor()方法的作用域在setBox()内
var b='kkk'; //b的作用域在setColor()里
alert(b);
return 123;
}
return setColor();
}
alert(setBox()); //123
---------------------------------------------------------------------
if(true){ //if语句的花括号没有作用域的功能
var box='Lee';
}
alert(window.box); //Lee
---------------------------------------------------------------------
for(var i=0;i<10;i++){
var box='Lee';
}
alert(window.i); //10
alert(window.box); //Lee
---------------------------------------------------------------------
function box(){
var num=10; //如果有var ,在函数体内声明变量,就是局部的,去掉var就是全局
}
box();
alert(num); //出错 num is not defined
function box(){
num=10; //如果有var ,在函数体内声明变量,就是局部的,去掉var就是全局
}
box();
alert(num); //10 但不建议此种写法
----------------------------------------------------------------------------------------------------
内存问题:
var box={};
box.name='Lee';
alert(box.name);
box=null; //解除对象引用,等待垃圾收集器回收
alert(box);