1.
if (!("a" in window)) { var a = 1; } alert(a);
变量声明会提前,但是变量赋值不会提前,相当于:
var a; if (!("a" in window)) { a = 1; } alert(a);2.
function a(x) { return x * 2; } var a; alert(typeof a);//function变量声明不会覆盖同名的其他方法、变量,同样:
var x = 1;var x;alert(x);//13.
function b(x, y, a) { arguments[2] = 10; alert(a); } b(1, 2, 3);//10
function b(x, y, a) { arguments[2] = 10; alert(a); } b(1, 2);//undefined
function b(x, y, a) { arguments[2] = 10; alert(arguments[2]); } b(1, 2);//10
arguments和传入的参数共享时是2个不同的内存地址,
使用JavaScript引擎来保证2个值是随时一样的, 当然这也有一个前提,那就是这个索引值要小于你传入的参数个数。 即如果你本来没有传入参数, 那么给arguments中赋值也不会多声明一个传入的参数。 4.
function a() { alert(this); } a.call(null);//window这个只是call的一个特性:如果第一个参数传入的对象调用者是null或者 undefined的话,call方法将把全局对象(
也就是window)作为this的值。