函数提升与变量提升常见面试题

函数提升与变量提升

在JavaScript中,变量的定义和函数的定义都会被提升,而且函数的声明优先于变量的声明;在变量中,变量的赋值不会被提升,只是声明被提升了,但是函数的声明有点不一样,如果是函数式声明则函数体也会被一同提升,如果是var式的声明,怎么提升声明,不会提升函数体。

例子1:

var a=3;
   function b(){
      if(a){
         var a=1;
      }else{
         var a=0;
      }
      console.log(a);
   }
   b();//控制台输出:0;此时输出的a是b函数里面的私有变量。

例子2:

 function b(){
      var a;
      if(a){
         a=1;
      }else{
         a=0;
      }
      console.log(a);
   }
   var a;
   a=3;
   b();//控制台输出:0;此时输出的a是b函数里面的私有变量。

例子3:

 var a=1;
   function b(){
      a=10;
      return;
      function a(){};
   }
   b();
   console.log(a);//控制台输出:1;此时输出的a是全局变量。

例子4:

function b(){
      function a(){};//函数提升,声明局部函数a;
      a=10;//将函数a强制进行类型转换为number,并赋值为10;此时的a是局部变量;
      return;      
   }
   var a;
   a=1;  
   b();//函数b的返回结果为undefined,因为在函数体里面,没有return任何东西;  
   console.log(a);//控制台输出:1;此时输出的a是全局变量。

例子5:

 a();//控制台报错,因为被提升的只是a的声明,而赋值的函数体却没有没提升,所以报错信息显示a不是一个函数;
   b();//控制台输出this is b funciton! ;函数b可以被提升;
    var a=function(){
      console.log('this is a function!');
   }
   function b(){
      console.log('this is b function!');
   } 

例子6:

 function b(){
      console.log('this is b function!');
   }  
   var a;
   a();//控制台报错,因为被提升的只是a的声明,而赋值的函数体却没有没提升,所以报错信息显示a不是一个函数;
   b();//控制台输出this is b funciton! ;函数b可以被提升;
   a=function(){
      console.log('this is a function!');
   } 

对于全局作用域范围的变量,var与没有var是有区别的,没有var的写法,其变量不会被提升。eval里面的变量也不会被提升;

例子

 console.log(a);//控制台报错,a未定义;a变量没有被提升;
   a=1;
   console.log(b);//控制台输出undefined;b未赋值;b变量得到提升;
   var b=1;
 function b(){
      console.log(a);//控制台输出undefined;a声明得到提升;
      var a=10;  
   }
   function d(){
      console.log(c);//控制台报错,变量c没有定义;c声明没有得到提升;
      eval("var c=10");
   }
   b();
   d();
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值