題目
- js基本資料型別
- 閉包是什么,寫一個簡單的閉包
- 原型和原型鏈
- 作用域
- this
- call、apply和bind
- ajax基本步驟以及readyState的五種狀態
- promise用過嗎?作用是什么?它的基本步驟
- get和post區別
- 繼承有哪些方式
- 淺拷貝深拷貝
答案
1. js基本資料型別
基本資料型別:number,string,boolean,null,undefined,symbol
參考型別:陣列、日期、正則、函式
2. 閉包是什么,寫一個簡單的閉包
閉包指的是函式內部的函式,它有權去訪問另一個函式內部的變數,當查找一個自由變數時,在函式定義的地方查找而不是函式執行的地方
function outer(){
let n = 0;
function inner(){
let m = 2;
alert(m+n);
}
}
outer();
function print(fn){
const a = 200;
fn();
}
const a = 100;
function fn(){
console.log(a);
}
print(fn);
3. 原型和原型鏈
js中有兩種原型,一種是顯式原型prototype(又稱為函式原型,只有函式才有),另一種叫做隱式原型_proto_(又稱為物件原型).
- prototype保存著實體共享的方法,有一個指標constructor會指回建構式
- _proto_用于指向創建這個物件的函式的prototype,假如需要獲取這個物件的屬性或方法時,先回在自身屬性或方法上查找,假如找不到就會通過_proto_向上尋找,由此形成原型鏈
4. 作用域
一個變數可以使用/生效的范圍,包括:全域作用域、函式作用域、塊級作用域,
全域作用域指的是window,函式作用域指的是函式,塊級作用域指的是有花括號的地方
5. this
- 作為普通函式呼叫 =>回傳window
- 使用call、apply、bind呼叫 =>傳什么系結什么
- 作為物件方法呼叫=>回傳物件本身
- 在class方法中呼叫=>回傳當前實體本身
6. call、apply和bind
改變this指向,call和apply傳參形式不一樣,call傳入一個個引數,apply傳入一個陣列,bind只有在呼叫時才會生效,
7. ajax基本步驟以及readyState的五種狀態
//1創建物件xmlhttprequest
const xhr = new XMLHTTPRequest();
//2創建一個http請求初始化
xhr.open('GET','/api',false);
//3send發送請求
xhr.send();
//4監聽狀態變化
xhr.onreadystatechange = function(){
//5查看狀態碼判斷狀態
if(xhr.readyState == 4){
if(xhr.status >= 200 &&xhr.status <= 300){
}
}
}
readyState:
- 未初始化0
- 正在載入1
- 載入完成2
- 開始決議3
- 決議完成4
8. promise用過嗎?作用是什么?它的基本步驟
promise是用來解決回呼地獄的回呼問題而產生的,是進行異步編程的新的解決方案
執行步驟:
基本編碼流程:
//1創建promise物件
const p = new Promise((resolve,reject)=>{
//2啟動異步任務
setTimeout(() =>{
const time = Date.now()
//3根據處理結果做不同處理
//3.1如果成功,呼叫resolve(),指定成功的value
if(time % 2 ===1){
resolve('成功的值' + time)
}else{
//3.2如果失敗,呼叫reject(),指定失敗的reason
reject('失敗的值' + time)
}
},2000)
})
//4promise指定成功或失敗的回呼函式來獲取成功的value或失敗的reason
p.then(
value =>{
//成功的回呼函式onResolved,得到成功的value
console.log('成功的value',value);
},
reason =>{
//失敗的回呼函式onRejected,得到失敗的reason
console.log('失敗的reason',reason);
}
9. get和post區別
- get一般用于獲取請求,post一般用于提交請求
- get傾向于放在url中,post傾向于放在body體內
- 從根本上來說兩種請求方式都不夠安全,因為http本身就是明文協議,所以安全的普遍做法是采用https密鑰加密協議,而由于get是放在請求體內,所以相對來說比較安全的做法是采用post+body的做法
- get資料的長度限制其實是指url的長度限制,但http協議本身其實對url的長度并未做任何限定,實際的限制是由客戶端/瀏覽器以及服務器限定的
10. 繼承有哪些方式
原型鏈繼承、建構式繼承、組合繼承、原型式繼承、寄生式繼承、寄生組合繼承
11.淺拷貝深拷貝
不懂的可以看這篇
淺拷貝基本資料型別拷貝的是值,參考型別拷貝的是地址,因此當值是參考型別時,新創建的值如果發送變化,那么指標指向的內容也就發送變化,因此原來的值也就改變,
淺拷貝方法有:
- object.assign
- 擴展運算子let cloneObj = {…obj}
- concat運算子
- slice拷貝陣列
- 手工實作
深拷貝指的是在記憶體中開辟一個新的空間,用來存放拷貝過來的值,新創建的值改變,不會影響到原有的值(因為它們不屬于同一個地址)
深拷貝方法:JSON.stringfy、手寫遞回實作
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/252694.html
標籤:其他
上一篇:JavaScript-快速入門
下一篇:CSS的基本用法
