if (!("a" in window)) {
var a = 1;
}
console.log(a); // undefined
变量提升,在代码顶部申明
var a = undefined
,"a" in window
会返回true,if语句不会执行。
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a); // 1
b = function a(){}
这是一个函数表达式,而命名函数表达式的名字只能在函数内部使用,在函数外部无法被访问。
function a(x) {
return x * 2;
}
var a;
console.log(a); // fn a
函数声明会覆盖变量声明
但是如果此处变量赋值var a = 1;
,则会覆盖函数声明,返回 1 。
function b(x, y, a) {
arguments[2] = 10;
console.log(a);
}
b(1, 2, 3); // 10
在实参个数>=形参个数的情况下,arguments和参数虽然引用不同的内存地址,但是也可以实现共享;但是如果参数个数不匹配,则会造成数据不一致。
此处如果参数只传了x和y,没有传a的话,会打印出undefined
。
function a() {
alert(this);
}
a.call(null); // window
这是一个不懂能答对,略懂的反而答不对的问题。因为有个需要特别注意的点:
根据ECMAScript262规范规定:如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象(也就是window)作为this的值。所以,不管你什么时候传入null,其this都是全局对象window。