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 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
在JavaScript中获取请求的URL参数
Dec 22 Javascript
javascript 基础篇4 window对象,DOM
Mar 14 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
将 vue 生成的 js 上传到七牛的实例
Jul 28 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
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
SONY ICF-SW55的电路分析
2021/03/02 无线电
PHP用mysql数据库存储session的代码
2010/03/05 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
php的4种常见运行方式
2015/03/20 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
在python中pandas的series合并方法
2018/11/12 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
实例代码讲解Python 线程池
2020/08/24 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
大学生个人先进事迹材料范文
2014/05/03 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
物业公司管理制度
2015/08/05 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python