上海WEB培训
达内上海市场营销中心

15026646813

热门课程

来自一位Web大牛口中的工程师常见面试题

  • 时间:2018-06-29 19:09
  • 发布:达内上海Web培训官方首页
  • 来源:企业面试题

作为IT行业内门槛极低的web前端开发,许多没有基础的人选择了转行到这个行业。虽然前端是每一个人都可以学会的技术,但是对web理解过于简单,普遍停留在毫无计算含量的网页布局以及美工基础上的那部分开发人员来说,提升web技术是早晚的事儿。

为了能让大家学习到专业的web工程师岗位需求的知识,这里上海web培训机构达内小编跟大家分享来自Web大牛的一些常见面试题,希望在成为一名合格的web工程师的路上祝你一臂之力。

这里上海Web培训机构以面试一位成熟的web工程师为标准,看看都会有怎样的问题与知识点值得你学习。

1,解释下作用域链?

当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。

上海Web培训机构顺带写下作用域链的作用:用于解析标识符,当函数被创建时,会将this、arguments、命名参数和该函数中的所有局部变量添加到该当前作用域中,当JavaScript需要查找变量X的时候,它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头,也就是全局作用域链,仍未找到该变量的话,就认为这段代码的作用域链上不存在x变量,并抛出一个引用错误(ReferenceError)的异常。

2,解释下原型链?

JavaScript中的每个对象都有一个prototype属性,我们称之为原型,而原型的值也是一个对象,因此它也有自己的原型,这样就串联起来了一条原型链,原型链的链头是object,它的prototype比较特殊,值为null。

这里上海Web培训机构小编觉得有必要写下原型链的作用:用于对象继承,函数A的原型属性(prototype property)是一个对象,当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例,比如我们新建一个数组,数组的方法便从数组的原型上继承而来。

当访问对象的一个属性时, 首先查找对象本身, 找到则返回; 若未找到, 则继续查找其原型对象的属性(如果还找不到实际上还会沿着原型链向上查找, 直至到根). 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到,若整个原型链未找到则返回undefined。

3,new关键字写与不写都可以构建对象,如何实现该构造函数?

function Person(name, age) {

// 判断this是否为当前的构造函数

if (!(this instanceof Person)) {

return new Person(name, age);

}

this.name = name;

this.age = age;

}

var p1 = new Person('xiaoming', 19);var p2 = Person('xiaoming', 20);

console.log('-------------');console.log(p1);console.log(p2);

4,什么情况下会遇到内存泄露?如何解决?

上海Web培训机构这里解释下,内存泄漏:指任何对象在您不再拥有或需要它之后仍然存在。

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏

闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)。

5,Promise与bind与箭头函数的问题?

class Foo {

constructor (name) {

this.name = name

}

greet () {

console.log('hello, this is ', this.name)

}

someThingAsync () {

return Promise.resolve()

}

asyncGreet () {

this.someThingAsync().then(this.greet)

// bind绑定

// this.someThingAsync().then(this.greet.bind(this))

// 使用箭头函数

// this.someThingAsync().then(() => this.greet())

}

}new Foo('dog').asyncGreet()

6,如何判断一个对象的类型

Object.prototype.type = function () {

// 使用Object原型上的方法,将对象转为字符串

var res = Object.prototype.toString.call(this);

// 从第8位开始截取,然后删除最后一位

res = res.substring(8).slice(0, -1);

// 返回结果

return res;

};

7,闭包的使用,构造函数内部变量私有化

const Person = function (name) {

this.name = name;

let gender = 'F';

function genderFunc() {

return gender;

}

this.gender = genderFunc();

}

var p = new Person('xiaoming');console.log(p.gender);

学习使我们处于不败之地,IT学习更能让我们适应互联网+大数据时代的高速发展,上海达内带你一同走进魔都的高薪阶层,做更有价值的事。【上海Web培训机构】达内 扫码获取免费学习机会


上一篇:Web工程师训练陷阱:canvas 图片合成中的坑
下一篇:一位前端老程序员无法忘怀的百度电话面试

一位前端老程序员无法忘怀的百度电话面试

上海Web开发培训:简单的SWING图形用户界面

来自一位Web大牛口中的工程师常见面试题

Web工程师训练陷阱:canvas 图片合成中的坑

选择城市和中心
贵州省

广西省

海南省

免费学习5天VIP课程