So, you think you know JavaScript?

Baranovskiy
 
题目一:
 
if (!("a" in window)) {
    var a = 1;
}
alert(a);
答案:undefined
关键点:js的所有变量自动提前声明
           全局变量挂载在window下
 
 
题目二:
 
var a = 1,
    b = function a(x) {
        return x && (x + a(--x));
    };
alert(a);
答案:1
关键点:函数声明与函数表达式的区别;
           函数声明会覆盖变量声明但不会覆盖变量赋值;
           声明的函数名与函数表达式的别名优先放在函数的作用域中;
其他:执行b(2)得到3
延伸:
var a = 1;
function a(x) { return x && (x + a(--x)); };
          a依然是1,a(2)会报错“TypeError: number is not a function
          补充:解析时先提前声明后赋值,函数声明覆盖变量声明
          再延生:
var a;
function a(x) { return x && (x + a(--x)); };
         执行a(2)得到3,a++得到NaN,
         将var a;移到最后依然得到同样的结果。          
 
题目三:
function a() {
    alert(this);
}
a.call(null);a.call({});
         答案:[object Window]、[object Object]
         关键点:call的this指定功用
                    null将被无视,同样的还有undefined
 
原文地址:https://www.cnblogs.com/longze/p/3665922.html