原贴地址:http://bbs.csdn.net/topics/390300541
一、
if (!("a" in window)) {
var a = 1;
}
alert (a);
二、
var a = 1,
b = function a (x) {
x && a (--x);
};
alert (a);
三、
function a (x) {
return x * 2;
}
var a;
alert (a);
四、
function b (x, y, a) {
arguments[2] = 10;
alert (a);
}
b(1, 2, 3);
五、
function a () {
alert (this);
}
a.call (null);
解答:
一、undefined
理由:JS的作用域是以函数来划分的,而不是以块来划分。大括号({})不属于作用域。在执行JS的时候,会先预编译一下要执行的JS代码。在编译的过程中,a被定义,所以"a" in window为true,if判断为false,赋值语句未执行,结果为undefined。
二、1
理由:function a为局部变量,a的值仍为1。
三、
function a(x) {
return x * 2;
}
理由:var a只是申明,并未赋值。a仍指向原来的值,即function a。
四、10
理由:arguments代表了函数实际接收参数的集合,可以通过下标对相应参数进行访问。如果修改此对象,则相应变量的值也会被修改。
五、[Object Window]
理由:call方法的作用是以对象B代替对象A来调用对象A的方法,使方法中的this指向对象B。call方法有多个参数,第一个参数为用来代替对象的对象,也就是对象B。其他参数用来传递给方法。当第一个参数为空时,将会使用全局window对象。即函数中的this指向window。