JavaScript面试题(指针、帽子和女朋友)

 更新时间:2016年11月23日 15:57:25   作者:我叫blue  
本文小编给大家分享一道js面试题--指针、帽子和女朋友的题目,非常有意思,感兴趣的朋友参考下吧

首先,事情开始于一道面试题

<script>
function A(){
this.name="";
this.age=18;
}
var a1=new A();
a1.name="尼古拉斯";
var a2=a1;
a2.name="blue";
console.log(a1.name); //变成blue了
var str1="尼古拉斯";
var str2=str1;
str2="blue";
console.log(str1); //没变,还是尼古拉斯
</script>
简单来说
a2=a1;
a2.name=xxx; //a1.name会变
str2=str1;
str2=xxx; //str1不会变

欢迎觉得废话太多的同学直接翻到最后看“技术流解释”哈,那么我们开始

套用一句比较俗的话:“道理我都懂,可是为什么字符串就不会变呢”,JavaScript作为高级语言并没有指针的概念,但却又总被这事儿困扰,今天我就想试试让大家理解这个概念,如果要弄明白这个事情,请先来弄明白一个特别简单的事情:

假设你有女朋友叫梦琪,喜欢带黄色帽子,你帮她买了顶红色帽子,请问:梦琪带什么颜色的帽?

答:红色

假设你有女朋友叫梦琪,喜欢带黄色帽子,你直接换了个喜欢带红色帽子的女朋友,请问:梦琪带什么颜色的帽子?

答:还是黄色,没变

如果我们理解了上面这个花心萝卜和戴帽子的女朋友的问题,那么问题就变得非常简单,用代码再表示一遍:

//情况1:换帽子
你.女朋友=梦琪;
你.女朋友.帽子=红色;
console.log(梦琪.帽子); //红色
//情况2:换女朋友
你.女朋友=梦琪;
你.女朋友=安易;
console.log(梦琪.帽子); //黄色,没变

简单来说,你换女朋友了,关人家帽子啥事,对吧

为了彻底弄明白问题的步骤1/2:

让我们把这个本就混乱的关系搞得更乱一些吧[捂脸]

假设张三和李四,都找了同一个女朋友,张三给她买了一顶帽子,请问:李四的女朋友换帽子了没?

答:换了

假设张三和李四,都找了同一个女朋友,张三扛不住了,又新找了个女朋友,请问:这跟李四女朋友的帽子有关系吗?

答:有毛关系啊

上面这个混乱的关系,用程序表述出来就是:

//情况1.换帽子
张三女朋友=李四女朋友; //传说中的引用:第一次见到能把出轨说的这么清新脱俗的
张三女朋友.帽子=绿色的帽子;
console.log(李四女朋友.帽子); //变了,绿的
//情况2.跟帽子有毛关系
张三女朋友=李四女朋友;
张三女朋友=新的女朋友;
console.log(李四女朋友.帽子); //不知道什么颜色,反正没变

为了彻底弄明白问题的步骤2/2:

直接上代码了,解释见注释哈

//情况1:帽子
var 张三女朋友=new 女朋友(); //太方便了有没有
var 李四女朋友=张三女朋友; //又引用了
张三女朋友.帽子=红的;
console.log(李四女朋友.帽子); //红的,变了
//情况2:跟帽子有毛关系
var 张三女朋友=new 女朋友();
var 李四女朋友=张三女朋友;
张三女朋友=另一个;
console.log(李四女朋友.帽子); //没变,跟帽子有毛关系

所以,现在请跟随我再来重新看一遍上面的问题

//情况1
var a1=new A();
var a2=a1;
//注意:在这个时候,a1和a2就是同一个东西,引用嘛,你懂的
a2.name="blue"; //你给女朋友,买了顶新的帽子
console.log(a1.name); //她的帽子是Blue色的
//情况2
var str1="aaa";
var str2=str1;
//注意:这个时候,str1和str2也是同一个东西,也是引用
str2="blue"; //你直接换了个女朋友
console.log(str1); //你原先女朋友没啥变化

人上了年纪就会很啰嗦,直接上图多好:

情况1:a2.name="blue"

情况2:str2="blue"

==========================纯技术流分隔线==========================

1.指针:代表一个变量或属性指向谁

2.赋值:代表改变变量或属性的指向

合起来用:

a1=a2;
a2.name='blue';
//改变a2.name指向了'blue';但a1和a2依然指向同一个对象,所以:a1.name=>'blue'
str1=str2;
str2='blue';
//改变str2指向了'blue';这时str1和str2不再指向同一对象,所以:str1不变

以上所述是小编给大家介绍的JavaScript面试题(指针、帽子和女朋友),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • JS根据浏览器窗口大小实时动态改变网页文字大小的方法

    JS根据浏览器窗口大小实时动态改变网页文字大小的方法

    这篇文章主要介绍了JS根据浏览器窗口大小实时动态改变网页文字大小的方法,涉及JavaScript针对页面宽高的动态获取与元素样式动态运算的相关技巧,需要的朋友可以参考下
    2016-02-02
  • js自调用匿名函数的三种写法(推荐)

    js自调用匿名函数的三种写法(推荐)

    下面小编就为大家带来一篇js自调用匿名函数的三种写法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • javascript修改IMG标签的src问题

    javascript修改IMG标签的src问题

    javascript修改IMG标签的SRC,在IE6下面图片修改正常,但在IE7和Firefox下面却不刷新,下面有个解决方法,大家可以参考下
    2014-03-03
  • 使用JS 插件qrcode.js生成二维码功能

    使用JS 插件qrcode.js生成二维码功能

    qrcode.js是一个使用比较多的js生成二维码的插件,非常方便,接下来通过本文给大家分享使用JS 插件qrcode.js生成二维码功能,需要的朋友参考下
    2017-02-02
  • xmlplus组件设计系列之文本框(TextBox)(3)

    xmlplus组件设计系列之文本框(TextBox)(3)

    xmlplus 是一个JavaScript框架,用于快速开发前后端项目。这篇文章主要介绍了xmlplus组件设计系列之文本框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • js showModalDialog 弹出对话框的简单实例(子窗体)

    js showModalDialog 弹出对话框的简单实例(子窗体)

    本篇文章主要是对js_showModalDialog弹出对话框的简单实例(子窗体) 进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • ES6 Array常用扩展的应用实例分析

    ES6 Array常用扩展的应用实例分析

    这篇文章主要介绍了ES6 Array常用扩展的应用,结合实例形式分析各种常见扩展方法针对Array数组的转换、遍历、查找、运算等相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • JavaScript使用Range调色及透明度实例

    JavaScript使用Range调色及透明度实例

    本文给大家分享的是使用range做的一个简单的手动调色并可以得到RGB值的小工具,非常的实用,有需要的小伙伴可以参考下
    2016-09-09
  • layui使用templet格式化表格数据的方法

    layui使用templet格式化表格数据的方法

    今天小编就为大家分享一篇layui使用templet格式化表格数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • javascript数组去重小结

    javascript数组去重小结

    本文给大家汇总介绍了javascript中数组去重的4种方法,分别是循环匹配去重,JSON去重/对象去重/字典去重,队列递归去重,INDEXOF去重方式,非常的细致全面,有需要的小伙伴可以参考下。
    2016-03-03

最新评论