Fork me on GitHub

面试题之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






posted @ 2019-09-22 16:38  较瘦  阅读(183)  评论(0编辑  收藏  举报
知识点文章整理