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


Posted in Javascript onNovember 23, 2016

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

<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); //你原先女朋友没啥变化

人上了年纪就会很??拢?苯由贤级嗪茫?/p>

情况1:a2.name="blue"

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

情况2:str2="blue"

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

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

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面试题(指针、帽子和女朋友),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
文本框回车提交与禁止提交示例
Sep 27 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
JS阻止用户多次提交示例代码
Mar 26 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
Jun 23 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
纯JavaScript实现实时反馈系统时间
Oct 26 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
uni-app使用微信小程序云函数的步骤示例
May 22 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 #Javascript
移动开发之自适应手机屏幕宽度
Nov 23 #Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 #Javascript
jQuery-mobile事件监听与用法详解
Nov 23 #Javascript
jquery-mobile表单的创建方法详解
Nov 23 #Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 #Javascript
浅析Node.js:DNS模块的使用
Nov 23 #Javascript
You might like
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php简单日历函数
2015/10/28 PHP
php中namespace use用法实例分析
2016/01/22 PHP
php实现数字补零的方法总结
2018/09/12 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
对联广告js flash激活
2006/10/19 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
ipython和python区别详解
2019/06/26 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
法律进机关实施方案
2014/03/12 职场文书
企业授权委托书范本
2014/04/02 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
老人节标语大全
2014/10/08 职场文书
安全保证书
2015/01/16 职场文书