传递参数
function setName(obj){ obj.name="Nicholas"; obj=new object(); obj.name="Greg"; } var person=new Object(); setName(person); alert(person.name); //"Nicholas"
在函数体内重新new一个Object,并将它赋值为"Greg",但在函数外部访问name属性时,其值仍为"Nicholas".实际上,当函数内部重写obj时,这个变量引用的就是一个局部对象了。
而这个局部对象会在函数执行完毕后立即销毁。
检测类型
如果变量的值是一个对象或null,则typeof操作符会像下面例子中所示的那样返回"object";
var n=null; var o=new object(); alert(typeof n); //object alert(typeof o); //object
延长作用域链
当执行流进入下列任何一个语句时,作用域链就会得到加长:
try-catch 语句的catch块
with语句
function buildUrl(){ var qs="?debug=true"; with(location){ var url=href+gs; } return url; }
在此,with语句接收的是location对象,因此其变量对象中就包含了location对象的所有属性和方法。
没有块级作用域
if(true){ var color="blue"; } alert(color);
如果是在C,C++或是JAVA中,color会在if语句执行完毕后被销毁,但在javascript中,if语句的变量声明会将变量添加到当前的执行环境。在使用for语句时尤其要牢记这一差异,如:
for(int i=0;i<10;i++){ doSomething(); } alert(i); //10