牛客_美团点评2020校招前端笔试题(仅个人学习记录)
1.(问答题)
题目描述
class A { String i = "op"; void func(String s) { s = ""+9; } static void test() { A a = new A(); a.func(a.i); }
}
问:
- 变量i,s,a在堆还是在栈中?
- 第8行执行完后a.i的值是什么?
1、i,s,a都在栈中,new出来的对象A在堆上。
考察js堆与栈:
栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null以及对象变量的指针;堆主要存储new出来的对象。
所以字符串变量i,s以及对象指针a都存在栈中,new出来的对象开辟内存存在堆上,对应地址是指针a存的内容
2、执行完后a.i的值还是字符串op。
考察参数传递按值传递:a是A类的实例,所以a.i=‘op’,a.func(a.i)这句执行函数,把a.i作为参数传递,该函数会复制一个变量,两个变量完全独立,所以在函数体里只是把复制的那个变量(一个新的局部变量)改变为’op9’,在函数体外的a.i并没有被改变
另外补充说明ECMAScript中所有函数的参数都是按值传递的——《高程3》,其实对于参数是对象的情况,实际上也是按值传递,把传参的指针复制出一个完全独立的变量,只是存的内容和传参对象地址一摸一样
JS中函数参数值传递和引用传递
2.(问答题)
请按顺序写出打印结果,并说明原因。
var name = 'global';
var obj = { name: 'local', foo: function(){ this.name = 'foo'; }.bind(window)
};
var bar = new obj.foo();
setTimeout(function() { console.log(window.name);
}, 0);
console.log(bar.name); var bar3 = bar2 = bar;
bar2.name = 'foo2';
console.log(bar3.name);
第10行的console是在定时器函数中,因此最后执行。
首先输出第12行bar调用name,由于第8行var bar = new obj.foo(); new绑定的优先级大于bind绑定,所以函数内部this还是obj {},输出foo。
再输出第16行console.log(bar3.name),bar3=bar2=bar,bar3/bar2/bar都是指向同一个对象,因此输出bar中的foo2。
最后输出定时器里的window.name,即global。
参考JS的this问题;JS this指向总结
哪个对象调用函数,函数里面的this指向哪个对象。
this 主要是在函数中使用,在函数外使用,一律指向全局对象。
在函数内使用 this 时,具体指向是由函数的调用方式决定,而不是根据函数定义方式决定。
- 函数作为普通函数运行时,可以看做是当做全局对象的方法运行,此时 this 指向全局对象。
- 函数作为对象的方法调用时,函数内的 this 指向该对象。
- apply call bind 改变 this 指向,bind 不会受到 apply 和 call 影响,bind优先级最高。一旦经历过bind函数,后面全输出bind指向的值。
- 定时器setTimeout设置的函数,this 会指向全局。bind 强制绑定优先级最高,不受定时器影响。
- ES6 箭头函数
ES6 的箭头函数没有自己的 this 和 arguments, 因此在箭头函数内部使用 this 和 argments, 其实使用的是外层的 this 和 arguments。由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。优先级高于bind
3.(问答题)
题目描述
请写出如下代码运行后产生的结果,并给出解释,说明结果是如何得出的。
setTimeout(() => console.log('a'));
Promise.resolve().then(() => console.log('b’);).then(() => Promise.resolve('c').then((data) => {setTimeout(() => console.log('d'));console.log('f');return data;})).then(data => console.log(data));
b f c a d 解析戳此
JS的setTimeout和Promise——同步异步和微任务宏任务
这一次,彻底弄懂 JavaScript 执行机制(这一篇我看的最明白,
牛客_美团点评2020校招前端笔试题(仅个人学习记录)相关推荐
- 小红书2020校招前端笔试题卷三
小红书2020校招前端笔试题卷三题目地址 第一题 第一题我做错了以为是选错误的 第二题 第三题 解: JS中的执行机制(setTimeout.setInterval.promise.宏任务.微任务), ...
- 美团点评2020校招前端方向笔试题
五:斐波那契数列 代码 #include <iostream> #include <cstring>using namespace std; typedef long long ...
- 小红书2020校招前端笔试题卷一
题目1-下列说法正确的是()多选 A: requestAnimationFrame(foo) 确保使浏览器在下一次重绘之前调用 foo 方法B: 在 addEventListener 的处理方法中使用 ...
- 小红书2020校招数据分析笔试题卷四 解析
小红书2020校招数据分析笔试题卷四 解析 单选题 多选题 填空题 简答题 题目来自小红书2020校招数据分析笔试题卷四 单选题 如果在小红书商城中某一商户给一产品定价,如果按照全网最低价500元定价 ...
- 小红书2020校招算法笔试题卷一
小红书2020校招算法笔试题卷一 字符串倒序 薯队长带着小红薯参加密室逃脱团建游戏,首先遇到了反转游戏,小红薯们根据游戏提示收集了多个单词线索,并将单词按要求加一个空格组 成了句子,最终要求把句子按单 ...
- 为了OFFER系列 | 牛客网美团点评数据分析刷题
@Author:Runsen 对于大学的每一个阶段,都有着不同的意义,在大学期间一定要有明确的战略.打法,以及人生布局,才能最大程度的提升自己,才能在未来走的更远. 现如今大四,为了OFFER,冲啊 ...
- 美团点评2020校招笔试练习
梯度消失产生的主要原因有:一是使用了深层网络,二是采用了不合适的损失函数. (1)目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化.其中将 ...
- 【2020牛客网笔试整理】小红书笔试题
薯队长写了一篇笔记草稿,请你帮忙输出最后内容. 1.输入字符包括,"(" , ")" 和 "<"和其他字符. 2.其他字符表示笔记内容 ...
- 【美团点评2020校招测试方向笔试题】算法题部分1.删除字符 2.队列组合排序 3.寻找最小子字符串 4.最大矩形 5.最短送餐路程计算
做题网址:点击进入 1.[编程题]删除字符 将给定的字符串,按照规则删除字符,输出删除后的字符串.删除规则为:相同字符连续,则删除,如"aaaab"删除后的字符串为"b& ...
最新文章
- hadoop学习-stream-Top K记录
- Python编程基础:第七节 字符串切片String Slicing
- yii框架cookie写入与读取方法
- 【转】使用手势对UIImageView进行缩放、旋转和移动
- 使用vscode连接阿里云服务器报错: ssh: Could not resolve hostname Name or service not known
- Citrix StoreFront无法正常初始化
- 报错Failed to load config “prettier“ to extend from.?两步解决方案
- C语言书中例题错误,C语言例题错误了吗?
- STM32驱动LCD1602程序(调试已成功)
- Freeswitch连接SIP软电话
- git commit 参数详解 --amend
- Ubuntu 14.04 卸载搜狗拼音输入法及后续问题解决
- cascading 使用_欢迎使用Cascading 2.0 –减轻Hadoop困境的开源API
- [cesium] | 城市警情模拟
- 储罐液位计算机控制系统,罐区管理系统
- [嵌入式基础]-arm架构和x86架构区别
- visio拉动线条总是保持直线状态
- win2008r2 安装 .net core 报错
- WordPress常见问题及其解决方法
- golang 超好用 json 解析包