前端试题

Posted jiaqi1719

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端试题相关的知识,希望对你有一定的参考价值。

1.  请写出下列代码段的输出结果

    1)alert(-1? true: false)   // true

    2)alert("" ? true: false)  // false

    3)alert(0 ? true: false)   // false

2. MVC, MVP, MVVM 区别

   参考链接(阮一峰):http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

3.如何获取浏览器URL中查询字符串中的参数?

详见location对象

location.href, location.search

4.写出使用this的典型应用

   1) 在html元素事件属性中使用

<input type=”button” onclick=”showInfo(this);” value=”点击一下”/>

2)构造函数
function Animal(name, color) {
  this.name = name;
  this.color = color;
}
3)input点击,获取值

<input type="button" id="text" value="点击一下" />
<script type="text/javascript">
var btn = document.getElementById("text");
btn.onclick = function() {
alert(this.value); //此处的this是按钮元素
}
</script>
4)

apply()/call()求数组最值

var numbers = [5, 458 , 120 , -215 ];
var maxInNumbers = Math.max.apply(this, numbers);
console.log(maxInNumbers); // 458
var maxInNumbers = Math.max.call(this,5, 458 , 120 , -215);
console.log(maxInNumbers); // 458
5. call ,apply, bind 理解

 call、apply、bind的作用是改变函数运行时this的指向

getName.call(obj, ‘Dot‘, ‘Dolby‘) 我的理解是 getName方法被obj调用;

call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数为null、undefined的时候,默认指向window。

var arr = [1, 2, 3, 89, 46]
var max = Math.max.call(null, arr[0], arr[1], arr[2], arr[3], arr[4])//89
var obj = {
    message: ‘My name is: ‘
}

function getName(firstName, lastName) {
    console.log(this.message + firstName + ‘ ‘ + lastName)
}

getName.call(obj, ‘Dot‘, ‘Dolby‘)

apply接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。

var arr = [1,2,3,89,46]
var max = Math.max.apply(null,arr)//89
var obj = {
    message: ‘My name is: ‘
}

function getName(firstName, lastName) {
    console.log(this.message + firstName + ‘ ‘ + lastName)
}

getName.apply(obj, [‘Dot‘, ‘Dolby‘])// My name is: Dot Dolby

bind返回对应函数, 便于稍后调用; apply, call则是立即调用。

在 ES6 的箭头函数下, call 和 apply 将失效;

6. 箭头函数内部this:

箭头函数内部的this是词法作用域,由上下文确定。

如果使用箭头函数,以前的那种hack写法就不需要了:

var that = this;

箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值

  • 箭头函数的 this 永远指向其上下文的  this ,任何方法都改变不了其指向,如 call() ,  bind() ,  apply() 

7.谈谈你对模块化的理解

所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数 

8. TCP三次握手

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

参考链接:https://www.cnblogs.com/rootq/articles/1377355.html

9.

 

 


 

以上是关于前端试题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

前端开发常用代码片段(中篇)

前端必问试题

前端开发常用js代码片段

前端防扒代码片段

前端防扒代码片段