每日一学(一)

简介:     以下两段代码各自的输出结果是什么,为什么。      //1. var a="window"; function Test(){ console.

    以下两段代码各自的输出结果是什么,为什么。

    

    //1.
    var a="window";
    function Test(){
        console.log(a);
        var a="local";
        console.log(a);
    }
    Test();
    
    //2.
    var pengpeng="This is his code!";
    pengpeng.love="study";
    console.log(pengpeng);
    console.log(pengpeng.love); 

    

    先说第一个,最后的输出结果首先输出undefined,然后输出local。有些神奇有木有,仔细梳理就会发现端倪了,代码首先定义了一个全局对象a,因此按理说执行Test第一行代码的时候,a此时应该会使用全局对象a的,往下的时候,局部a会覆盖全局a,然后接着输出local,但实际结果第一个却是undefined。

    关于这点,不得不提JS的加载逻辑了,很多人会觉得JS变量的定义和声明,是在JS运行期间进行的,其实不是,JS有个预加载逻辑,会事先构造运行环境以及作用域,那么答案就呼之欲出了,上面第一段代码,JS预加载的时候,局部变量a覆盖了全局变量a,那么既然是局部已经优先覆盖了全局a,为什么第一个a还是undefined呢? 这就不得不提作用域了,预加载的时候,全局a的作用域已经变成了局部a,所以一个输出的时候,根据作用域找a的时候,其实是找不到这个a的,此时的a,仅仅只是被定义过,但是它的作用链上,是指向下面的a的,下面的a在运行到那里的时候才会被赋值,而此时a相当于未赋值,所以输出undefined,如果不是全局定义了一下a,第一次输出a会报未定义。

    总结一下第一个案例的原理,JS预加载的时候,局部变量改变了全局变量的作用域,在局部变量之前访问全局变量时,此时值是undefined。

    


      再说第二个,这个不细心一下会被“障眼法”遮住,为啥给赋值了,第二个居然仍然输出undefined?? ——答案是,变量pengpeng只是一个值类型对象,而非引用类型对象,值类型是没有属性的, 只有引用类型才有。so,penglong.love肯定会输出undefined了。

    如果要用属性,得这么用:

    

    //3.
    var dingman=new Object();
    dingman.love="study";
    console.log(dingman.love);

    

    以上知识点出处:https://www.cnblogs.com/sharpxiajun/p/4133462.html

目录
相关文章
|
3月前
|
XML Java 数据格式
🚀今天,我们来详细的聊一聊SpringBoot自动配置原理,学了这么久,你学废了吗?
🚀今天,我们来详细的聊一聊SpringBoot自动配置原理,学了这么久,你学废了吗?
71 0
|
7月前
|
设计模式 缓存 算法
花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘
Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给我们总结出一套软件开发可以反复使用的经验,帮助我们提高代码的可重用性、系统的可维护性等,解决软件开发中的复杂问题。
101 0
|
9月前
|
前端开发 JavaScript Java
前端小白的几个坏习惯
前端小白的几个坏习惯
课外闲谈2.常用操作总结
随机输入字符串,最常见的操作就是用while,定义一个特殊的条件,例如while((ch=getchar())!=‘\n’);这样的话,结束标志就是回车键,并且,回车键不会被算入在内。
58 0
|
SQL 数据库连接 Go
【锦囊妙计】我做PHP开发时踩的坑
这篇文章整理了我在开发过程中遇到的一些问题,比如“如何更好的比较字符串”,“什么场景下应该用什么函数读取文件”。
|
XML Java 应用服务中间件
【Servlet入门】一篇文章让你从没听过到了熟于心
上一篇我们学习了Java Web中的XML部分了,如果你对XML一无所知,那你可以去看看这一篇文章,它可以使你快速入门XML。
【Servlet入门】一篇文章让你从没听过到了熟于心
外行人都能看懂的WebFlux,错过了血亏(一)
这篇文章主要讲解什么是WebFlux,带领大家入个门,希望对大家有所帮助(至少看完这篇文章,知道WebFlux是干嘛用的)
3968 0
外行人都能看懂的WebFlux,错过了血亏(一)
|
监控 前端开发 Java
外行人都能看懂的WebFlux,错过了血亏(二)
这篇文章主要讲解什么是WebFlux,带领大家入个门,希望对大家有所帮助(至少看完这篇文章,知道WebFlux是干嘛用的)
926 2
外行人都能看懂的WebFlux,错过了血亏(二)
|
XML 前端开发 Java
花了两天肝出来的Spring注解编程的发展历程,相信对每个小伙伴都会有帮助的,建议收藏哦。
花了两天肝出来的Spring注解编程的发展历程,相信对每个小伙伴都会有帮助的,建议收藏哦。
花了两天肝出来的Spring注解编程的发展历程,相信对每个小伙伴都会有帮助的,建议收藏哦。
|
XML Java Maven
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她(2)
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她
109 0