美文网首页
前端面试题

前端面试题

作者: 漓漾li | 来源:发表于2018-12-11 17:56 被阅读4次

1.

var a = 1;
if (!(b in window)) {
    var b = 2; //  改成 let b = 2,结果如何
    a += 1;
} else {
    a += 2;
}
console.log(a);
console.log(b);

因为变量提升,所以b in window为 true,所以if判断结果为 false,a+2、b声明未赋值,输出3 undefined

如果改为let b =2,let会产生暂时性死区,所以if判断为true。但let声明会产生块级作用域,所以b为局部变量,外部访问不到。输出2Uncaught ReferenceError: b is not defined



2.

function Fn() {
    sayName = function() {
        console.log("asdfasdf");
    };
    this.name = "li";
}
Fn.sayName = function() {
    console.log(2);
};
Fn.prototype.sayName = function() {
    console.log(3);
};
var sayName = function() {
    console.log(4);
};
function sayName() {
    console.log(5);
}

new Fn.sayName(); 
new Fn().sayName(); 
new new Fn().sayName(); 
sayName();


3.

var a = 1;
var obj = {
    a: 2,
    say: function() {      // say 改为箭头函数,结果如何
        console.log(this.a);
    }
};
var say = obj.say;

say();    
say.apply();  
say.apply({ a: 3 });  
  1. 调用者是window,所以打印 window.a,即 1
  2. 非严格模式下,apply的第一个参数为 undefined或 null时,则指向全局对象 window,结果同上
  3. apply改变了函数内 this指向,指向了 {a: 3},所以打印 3

如果 say改为箭头函数:由于箭头函数不绑定 this, 它会捕获其所在(即定义的位置)上下文的 this值, 作为自己的 this值。所以三个输出都为 1

4. 箭头函数是否有arguments

没有。如果在函数作用域中,就获取上层的arguments。

5. promise的链式调用如何中断

在then函数里,返回一个reject状态的promise对象,就可以跳过下面的then调用,直接执行catch函数

6. Object.create()

7. hasOwnPropertyin

  • hasOwnProperty判断一个对象是否有此名称的属性,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
  • in判断的是对象的所有属性,包括对象实例及其原型的属性;

相关文章

网友评论

      本文标题:前端面试题

      本文链接:https://www.haomeiwen.com/subject/oxnshqtx.html