有关Js作用域声明提升

js抛不开的话题就是这个变量提升了,看了YDKJS关于这个的章节,总结几点。

1.声明提升,赋值不提升,这其实表象来看的结果,其实质如下

alert(foo);

var foo = 1;

比如这两行,结果是undefined,并不是1,就是因为编译器把var foo = 1拆成了两句话,一句var foo,一句foo = 1;

结果变成了

var foo;

alert(foo);

foo = 1;

2.函数提升 > 变量提升

alert(foo());

function foo(){

    return 1;

}

var foo = function(){

   return 1;

}

按照第一条的理论,还有惯性思维的判断,后声明后后提升,这个看起来应该是undefined,结果其实是1.

3.后声明,后提升

alert(foo());

if(true){

    function foo(){ return 1;}

} else {

    function foo(){return 2;}

}

这个大家都觉得应该是1吧,其实不是,我们能得出这个结论,是因为我们在看代码是使用的执行视角,但是代码在运行之前要用编译器的视角来完成运行路线,所以在上面那段代码中,编译器会看到两段声明,第二段,覆盖了第一段。

这就是神奇的js语言。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 5,617评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,769评论 19 139
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • 刚睡醒,看着窗外的东西都在阳光下,莫名的喜欢这种感觉。我就喜欢阳光下的一切,印象中的小时候大多数都是在阳光下的。出...
    forYouForUs阅读 1,352评论 0 0
  • JavaSAX解析XML第一步:自定义一个类继承DefaultHandler JavaSAX解析XML第二步:重写...
    chad_it阅读 1,664评论 0 2