面試題集

簡(jiǎn)述JS中this的指向和如何改變它的指向

javascript中,this是動(dòng)態(tài)綁定的,它可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式,

this永遠(yuǎn)指向的是最后調(diào)用它的對(duì)象,也就是看它執(zhí)行的時(shí)候是誰(shuí)調(diào)用的。

改變this方法:方法call(), apply(), bind()

1、aa.call(Person, 4, 5); //this指向Person

2、aa.apply(Person, [4, 5]); //this指向Person

3、aa.bind(Person, 4, 5); //只是更改了this指向,沒(méi)有輸出

? aa.bind(Person, 4, 5)(); //this指向Person

原型鏈中a.b=2,a.b=3,到底是幾呢。在實(shí)例本身找到的話就不會(huì)向后面找了。

在訪問(wèn)一個(gè)實(shí)例的屬性的時(shí)候,現(xiàn)在實(shí)例本身中找,如果沒(méi)找到就去它的原型中找,還沒(méi)找到就再往上找,直到找到。這就是原型鏈。

構(gòu)造函數(shù),通過(guò)new一個(gè)實(shí)例出來(lái),實(shí)例里面有_proto_,_proto_里面有構(gòu)造器(constructor)和_proto_,? ? ? ?

prototype是函數(shù)才有的屬性,_proto_是每個(gè)對(duì)象都有的屬性。

var A = function(){};

var a = new A();

console.log(a.__proto__.__proto__.__proto__); //null

H5 的一些新特性

新增了一些語(yǔ)義化標(biāo)簽:header、footer、nav、aside、article、audio、video等

媒體查詢 @media 可以做出響應(yīng)式頁(yè)面

audio video 音頻視頻標(biāo)簽

Canvas標(biāo)簽:canvas 元素本身是沒(méi)有繪圖能力的。所有的繪制工作必須在 JavaScript 內(nèi)部完成

拖放:<img draggable="true"> 拖動(dòng)什么 - ondragstart 和 setData() 放到何處 - ondragover

新表單元素的引入(智能表單,對(duì)自動(dòng)輸入的內(nèi)容做基本的校驗(yàn)):input:type=number(數(shù)字)、email(郵箱)、url(地址)、range(滑塊)、date(日期)等,placeholder(占位符)、require(必填項(xiàng))。

本地存儲(chǔ):webstorage:sessionStorage和localStorage

sessionStorage(會(huì)話期間有效,關(guān)閉瀏覽器窗口就失效,容量5M,不同頁(yè)面或標(biāo)簽頁(yè)面間無(wú)法共享,適用于敏感賬號(hào)一次性登錄)

localStorage(本地存儲(chǔ)永久有效,多窗口共享,容量5M,用于長(zhǎng)期登錄+判斷用戶是否已登錄+適合長(zhǎng)期保存在本地的數(shù)據(jù))

獲取地理位置的api:Window.navigator.geolocation.getCurrentPosition(success,error)

CSS3

box-sizing:content-box? 寬度和高度分別應(yīng)用到元素的內(nèi)容框。

box-sizing:? border-box? 為元素指定的任何內(nèi)邊距和邊框都將在已設(shè)定的寬度和高度內(nèi)進(jìn)行繪制。

圓角和陰影,漸變

transform轉(zhuǎn)換和變形和動(dòng)畫(huà) @keyframes

@font-face 字體

數(shù)組去重或者是排序

js中數(shù)組去重:

var arr = [1,3,1,4,45,8,85,4,8,5,5];

Array.unique = function() {

? ? var newArr = [];

? ? for(var i = 0; i < this.length; i++) {

? ? ? ? //若在新數(shù)組中查不到arr[i]元素就向新數(shù)組中存儲(chǔ)arr[i],

? ? ? ? if(newArr.indexOf(this[i]) == -1) {

? ? ? ? ? ? newArr.push(this[i]);

? ? ? ? }

? ? }

? ? return newArr;

}

console.log(arr.unique());

排序:

var arr = [10, 20, 1, 2];

arr.sort(function(a,b){

? ? return a-b;

})

console.log(arr); //[1, 2, 10, 20]

閉包是怎么樣的,

當(dāng)function里嵌套function時(shí),內(nèi)部的function可以訪問(wèn)外部function里的變量。

會(huì)一層一層的往外訪問(wèn)。

js變量提升是什么:

變量提升:函數(shù)聲明和變量聲明總是會(huì)被解釋器悄悄地被"提升"到其作用域的最頂部。

JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。函數(shù)聲明會(huì)比變量聲明更提前

JavaScript 中,變量可以在使用后聲明,也就是變量可以先使用再聲明。

JavaScript 只有聲明的變量會(huì)提升,初始化的不會(huì)。

https://blog.csdn.net/amaoagou_0124/article/details/79559401

ES6用哪些,

1、let和const:使用let來(lái)聲明一個(gè)值會(huì)被改變的變量,而使用const來(lái)聲明一個(gè)值不會(huì)被改變的變量,也可以稱之為常量。

2、可省略 :function,更簡(jiǎn)便,

3、箭頭函數(shù)中,它沒(méi)有自己的this,函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。

4、模板字符串:是為了解決使用+號(hào)拼接字符串的不便利而出現(xiàn)的。 使用 `` 將整個(gè)字符串包裹起來(lái),而在其中使用 ${} 來(lái)包裹一個(gè)變量或者一個(gè)表達(dá)式。

5、在ES6中用...來(lái)表示展開(kāi)運(yùn)算符,它可以將數(shù)組方法或者對(duì)象進(jìn)行展開(kāi)。例如:

const arr1 = [1, 2, 3];

const arr2 = [...arr1, 10, 20, 30];

這樣,arr2 就變成了[1, 2, 3, 10, 20, 30];

Promise

前后端通信用的什么

axios,get、post方法,傳入請(qǐng)求地址,參數(shù),成功和失敗返回什么。

axios.post('../data/a2.php', {

? ? name:'tom',

? ? age:33,

? ? id:'wodo id shi 222'

})

.then(function(res){

? ? self.userList=res.data;

})

.catch(function(res){

? ? console.log(res);

});

實(shí)現(xiàn)ajax的基本步驟和原理

原理:

Ajax的原理簡(jiǎn)單來(lái)說(shuō)通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來(lái)操作DOM而更新頁(yè)面。

實(shí)現(xiàn)步驟:

? ? ? (1)創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象.

? ? ? (2)創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法、URL及驗(yàn)證信息.

? ? ? (3)設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù).

? ? ? (4)發(fā)送HTTP請(qǐng)求.

? ? ? (5)獲取異步調(diào)用返回的數(shù)據(jù).

? ? ? (6)使用JavaScript和DOM實(shí)現(xiàn)局部刷新.

數(shù)據(jù)雙向綁定原理和實(shí)現(xiàn)

v-model,原理就是利用了 Object.defineProperty() 這個(gè)方法重新定義了對(duì)象獲取屬性值(get)和設(shè)置屬性值(set)的操作來(lái)實(shí)現(xiàn)的。

之前項(xiàng)目有哪些需要優(yōu)化和安全

1、減少http請(qǐng)求,將一個(gè)頁(yè)面涉及到的所有零星圖片或者圖標(biāo)都包含到一張大圖里面,這樣就只需要加載這個(gè)一個(gè)圖片,而不是很多個(gè)圖片了

2、降低圖片的大小,壓縮圖片

3、圖片延遲加載(懶惰加載)或者是分頁(yè)加載,

4、html語(yǔ)義化,增強(qiáng)代碼可讀性和便于搜索引擎的搜索,seo。

項(xiàng)目遇到什么難題

狀態(tài)的管理

項(xiàng)目中遇到問(wèn)題如何解決

項(xiàng)目是如何進(jìn)行的,分配任務(wù)什么的

插槽和isGirl

flex有用嗎

box-sizing,一般什么是時(shí)候用

缺角的矩形和三角形

css樣式優(yōu)先級(jí)和兩個(gè)類一起用哪個(gè)生效

事件委托的概念

事件委托就是利用事件冒泡,只指定一個(gè)事件處理程序,就可以管理某一類型的所有事件。

https://www.cnblogs.com/liugang-vip/p/5616484.html

兼容性:

Event對(duì)象提供了一個(gè)屬性叫target,可以返回事件的目標(biāo)節(jié)點(diǎn),我們稱為事件源

標(biāo)準(zhǔn)中:ev.target

IE中:event.srcElement

跳轉(zhuǎn)(Forward)和重定向(Redirect)

跨域解決

簡(jiǎn)單的跨域請(qǐng)求jsonp即可,復(fù)雜的cors,窗口之間JS跨域postMessage,開(kāi)發(fā)環(huán)境下接口跨域用nginx反向代理或node中間件比較方便。

JSONP:利用script標(biāo)簽可跨域的特點(diǎn),在跨域腳本中可以直接回調(diào)當(dāng)前腳本的函數(shù)。

CORS:服務(wù)器設(shè)置HTTP響應(yīng)頭中Access-Control-Allow-Origin值為 * ,解除跨域限制。

普通跨域請(qǐng)求:只服務(wù)端設(shè)置header的Access-Control-Allow-Origin為 * ,前端無(wú)須設(shè)置,

若要帶cookie請(qǐng)求:前后端都需要設(shè)置。

前端:vue框架中 axios設(shè)置:axios.defaults.withCredentials = true

跨域后臺(tái)設(shè)置

? ? ? ? res.writeHead(200, {

? ? ? ? ? ? 'Access-Control-Allow-Credentials': 'true',? ? // 后端允許發(fā)送Cookie

? ? ? ? ? ? 'Access-Control-Allow-Origin': 'http://www.domain1.com',? ? // 允許訪問(wèn)的域(協(xié)議+域名+端口) /*

Git 常用命令詳解

git pull:拉取遠(yuǎn)程倉(cāng)庫(kù)

git commit:提交當(dāng)前工作空間的修改內(nèi)容

git push:推送遠(yuǎn)程倉(cāng)庫(kù),將本地commit的代碼更新到遠(yuǎn)程版本庫(kù)中

git log:查看歷史日志

git revert:還原一個(gè)版本的修改,必須提供一個(gè)具體的Git版本號(hào)

git如何處理版本沖突和新建合并分支

處理沖突:

先把云上的pull下來(lái),然后在本地合并修改之后,再commit,再push到云上。

創(chuàng)建合并分支:

git branch xxx (創(chuàng)建分支)

git checkout xxx (檢出)

git merge (合并分支)

webpack作用

主要有編譯,打包,模塊化管理,壓縮css,js,圖片等

cookie、sessionSttorage、localStory區(qū)別

數(shù)據(jù)存儲(chǔ)大小

cookie:4kb

webStorge:5mb

數(shù)據(jù)存儲(chǔ)有效期限

cookie:根據(jù)自己的設(shè)置時(shí)間

sessionStorage:關(guān)閉窗口后失效

localStorage:永久有效除非js刪除或者瀏覽器刪除

作用域

cookie和localStorage是在同源窗口,同一個(gè)瀏覽器共享的,sessionStorage只在同一個(gè)標(biāo)簽頁(yè)共享。

路由的跳轉(zhuǎn)方式:

路由的傳值:

組件間的傳值

1、父?jìng)髯樱?/p>

2、子傳父:

3、兄弟家組件傳值:

作用域鏈:

div垂直水平居中

position:absolute

top:50%

left:50%

transform:translate(-50%,-50%)

清除浮動(dòng)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,803評(píng)論 1 45
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,682評(píng)論 0 7
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 5,193評(píng)論 1 114
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,828評(píng)論 0 3
  • 相關(guān)概念 面向?qū)ο蟮娜齻€(gè)特征 封裝,繼承,多態(tài).這個(gè)應(yīng)該是人人皆知.有時(shí)候也會(huì)加上抽象. 多態(tài)的好處 允許不同類對(duì)...
    東經(jīng)315度閱讀 2,192評(píng)論 0 8

友情鏈接更多精彩內(nèi)容