javaScript 三个概念②

题目:

      var a=1

      b=function a(x)

{

x&&a(--x);

      }

alert(a);

看这个题目之前我们要了解上一篇文章写到关于三个概念

一、变量声明在进入执行上下文就完成。

b 相当于声明为 var b 或者等价于window.b   因为b作为全局变量 ,而所有的全局变量都是window的属性


二、我们也需要知道函数声明和变量声明也是一样的原来,是在进入执行上下就完成了

函数声明为: function functionName(arg1,arg2) {}

函数表达式:  var b=function (arg1,arg2){}

但函数表达式不一样,函数表达式相当于变量赋值一样,这相当于上一次三个概念的第三意思一样:变量声明可以提前(预编译),但变量赋值不可以(预编译)

三、 同一个命名的声明,函数声明会覆盖变量声明

function a(){}

var a;

alert(typeof a)   //尽管变量声明再后面(js执行是从上到下,从左到右),但是由于函数声明会覆盖变量声明这说明了函数声明的优先级高于变量声明的优先级

//所以结果会 弹出: function

 但是如果变量名赋值的话那就会变得不一样了;因为变量赋值初始化会覆盖函数声明:

function a(){}

var a=1;

alert(typeOf  a); 结果会是:number


综合上面的概念,重新回归到上个题目

由于a 作为变量声明 ,而我们所看 b=function a(){}是函数表达式,执行上下问之后a会变成函数声明(在不同浏览器是可以的但是在IE中 a 会变成undefined),所以函数声明会覆盖掉变量声明,但又由于 a作为变量声明赋值了,上面的题目相当于:

var a;

var b=function(x){

x&&b(--x);

}

a=1;

alert(a);

所以结果会:弹出 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值