面试题之JavaScript 代码执行
小编才疏学浅,若文章、答案有错误之处,欢迎邮件通知小编及时修改,同时也可以面试题投稿。最后祝大家共同进步!
写出代码执行结果:
function C1(name){
if (name) {
this.name = name;
}
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'John';
}
C1.prototype.name = 'Tom';
C2.prototype.name = 'Tom';
C3.prototype.name = 'Tom';
console.log((new C1()).name + (new C2()).name + (new C3()).name);
答案:
TomundefinedJohn
基础题目,无需多言,可以自行打印一下实例化的对象。
C1 {}__proto__: Object C2 {name: undefined} C3 {name: "John"}
写出代码执行结果:
window.number = 2;
var obj = {
'number': 3,
'db1': (function(){
this.number *= 4;
return function(){
this.number *= 5;
}
})()
};
var db1 = obj.db1;
db1();
obj.db1();
console.log(window.number + obj.number);
答案:
55
window.number = 2;
var obj = {
'number': 3,
'db1': (function(){
this.number *= 4;
return function(){
this.number *= 5;
}
})()
};
var db1 = obj.db1; //window.number = 8 , obj.number = 3
db1(); //window.number = 40 , obj.number = 3
obj.db1(); //window.number = 40 , obj.number = 15
console.log(window.number + obj.number); // 40 + 15
1、var db1 = obj.db1;
: 当代码执行到这里,由于obj.db1
是一个立即执行的匿名函数,所以这里的this
是指向的window
,并且执行了window.nuber*4
,又把一个匿名函数当做立即执行的匿名函数的返回值赋给了db1
2、db1();
: 这时db1是上一步返回的匿名函数,此时执行代码,相当于全局执行函数,this还是指向window,所以window.nuber*5
3、obj.db1();
: 执行到这里,obj.db1已经只是function(){this.number *= 5;}
函数体了,自执行函数只会在创建时候执行一次,所以只是obj.number*5
所以最终结果是: 40 +15
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具