首页 Javascript 正文
391

javascript中相同作用域下,变量与函数名同名的处理规则

javascript中相同作用域中,如果同时声明了一个变量a和一个函数a,那么到底是谁覆盖谁呢?答案是函数的优先级高,会覆盖掉同名变量。我们来看一断代码:
+function(){
    var a;
   function a(){};
   console.log( typeof( a ) ); //输出function, 从直觉上来说是这样没错,如果变量和函数的声明位置对调一下呢,接下看
}();

+function(){
   function a(){};
  var a;

   console.log( typeof( a ) ); //依然输出function, 充分证明了函数的声明优化级更高。但是还有一个隐藏的问题,看下面。
}();

+function (){
    var a=1;
   function a(){};
   console.log( a ); //输出1,呵呵,不是说好的函数声明优化级高吗?注意是声明的时候,函数的优化级高,但是给变量赋值之后就不一样了。
   a();//这里会报错,因为变量a已经不是一个函数了。
};

正在加载评论...