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文本框不能输入空格验证方法
Mar 19 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
原生javascript实现图片按钮切换
Jan 12 Javascript
Javascript节点关系实例分析
May 15 Javascript
Javascript监视变量变化的方法
Jun 09 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 Javascript
JS实现加载和读取XML文件的方法详解
Apr 24 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
菜鸟学PHP之Smarty入门
2007/01/04 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
关于Python数据结构中字典的心得
2017/12/04 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python流程控制 if else实现解析
2019/09/02 Python
关于Python-faker的函数效果一览
2019/11/28 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
人事专员的岗位职责
2014/03/01 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
内勤岗位职责
2015/02/10 职场文书
班主任开场白
2015/06/01 职场文书
第一书记观后感
2015/06/08 职场文书