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 相关文章推荐
JS往数组中添加项性能分析
Feb 25 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
详解如何在vue项目中使用layui框架及采坑
May 05 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
vue实现表格过滤功能
Sep 27 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
Postman如何实现参数化执行及断言处理
Jul 28 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
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP代码优化技巧小结
2015/09/29 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python网络编程之文件下载实例分析
2015/05/20 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
python学习入门细节知识点
2018/03/29 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
汽车专业人才自我鉴定范文
2013/12/29 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
幼儿园老师辞职信
2014/01/20 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书