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); 以上五段小代码是什么结果?为何是?

解决方案 »

  1.   

    1,先解析声明后运行,把a是最后为准 输出了 最后一个A函数
    2,a赋值1了,输出1
    3,var a; 只是声明,运行时略过,还是输出1
    4,本来b值是以最后这个,但在2处赋值了新函数,
      所以b = function a(x) { x && a(--x);   } ,我们知道这时a=1,它调用a(--x),所以出错了
    5。4出错了后面出没执行了
      

  2.   

    if (!("a" in window)) {
     var a = 1; 
    }
    alert(a); // undefined
      
     
    var a = 1,    
    b = function a(x) {  
         x && a(--x);   
    };
    alert(a); //1
     
     
    function a(x) {    
     return x * 2; } 
    var a;
    alert(a); //function a(x) {    return x * 2; }
     
     
    function b(x, y, a) {  
       arguments[2] = 10;  
       alert(a); }   //10
    b(1, 2, 3);
     
     
      
    function a() {   
      alert(this); }  // [Object window]
     a.call(null);
     我只是实际测试了一下,爱解释的来解释吧
      

  3.   

    见过一:undefined
    二:1
    三:方法a
    四:10
    五:window
      

  4.   

    第一个函数: a  一定是 window对象的属性之一,没有不是的可能,所以这里的条件是永远不成立的,顾a 的结果是undefined;
    第二个函数:a 定义的是全局变量,b是赋值,他把一个函数赋值给b
    第三个函数:变量a 虽然是后面var声明的变量,实际上相当于var a = function a(){};
    第四个函数:函数体内部的变量执行优先级最高,顾a的值就是 10 ;
    第五个函数:call方法是把另一个对象定义的方法,交给该对象来用,call的第一个参数是obj,
                a.call(null);这句话不会没有任何作用!其实这些理论的js知识,初学者自己深入的理解,知道就可以了~不需要纠结他为啥是这个结果!
    小作分析一下,只可做参考~
      

  5.   

    这道题看到过,似曾相识
    1、申明提前,那a就是window对象,赋值没执行。所以为undefined
    后面都不知道了