变量、作用域及内存 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);

posted @ 2017-07-14 14:38  耿鑫  阅读(135)  评论(0编辑  收藏  举报