国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

整理1

idealcn / 942人閱讀

摘要:加快整體響應(yīng)速度。步驟,用戶在商戶中選擇商品,提交訂單,選擇微信支付。微信支付要求商戶訂單號保持唯一性,商戶后臺收到用戶支付單,調(diào)用微信支付統(tǒng)一下單接口。,與團(tuán)隊成員,,產(chǎn)品經(jīng)理的溝通。

一:頁面性能優(yōu)化:
1,減少http請求,資源的合并與壓縮,恰當(dāng)?shù)木彺妫粸E用float,雪碧圖代替圖片,異步加載。減少dom節(jié)點,
二: 數(shù)組的深淺拷貝
1,假設(shè)B復(fù)制了A,當(dāng)修改A時,看B是否會發(fā)生變化,
如果B也跟著變了,說明這是淺拷貝,。如果B沒變,那就是深拷貝。
2,基本數(shù)據(jù)類型有哪些,number,string,boolean,null,undefined五類。
引用數(shù)據(jù)類型:對象,數(shù)組,函數(shù)。
3,如何深拷貝?
借用JSON對象的parse和stringify。
借用JQ的extend方法。
$.extend( [deep ], target, object1 [, objectN ] );
let a=[0,1,[2,3],4],

b=$.extend(true,[],a);

a[0]=1;
a2=1;
console.log(a,b);
4,使用場景?
但多人開發(fā)情況下,你是沒辦法明確這堆數(shù)據(jù)是否有其它功能也需要使用, 直接修改可能會造成隱性問題,深拷貝能幫你更安全安心的去操作數(shù)據(jù),
根據(jù)實際情況來使用深拷貝,

三: 前后端分離的原理
1,原始人時代:
發(fā)布,需要用eclipse把代碼打成一個war包,然后把這個war包發(fā)布到生產(chǎn)環(huán)境下的web容器里。這時候前后端代碼都在這個war包里,html,js,css,各種第三方庫等。這樣服務(wù)器壓力會很大,頁面中的所有請求都要通過這個服務(wù)器,如果同時很多人訪問這個網(wǎng)站速度就會很慢。一旦服務(wù)器出現(xiàn)狀況,前后端一起玩完,用戶體驗級差。。
2, 前后端分離的優(yōu)勢
1,可以實現(xiàn)正真的前后端解耦,前端服務(wù)器放 css,js,圖片等一系列資源,前端服務(wù)器負(fù)責(zé)控制頁面引用,跳轉(zhuǎn),路由。前端頁面異步調(diào)用后端的接口。加快整體響應(yīng)速度。
3,減少后端服務(wù)器的開發(fā)/負(fù)載壓力。除了接口外的http請求全部轉(zhuǎn)到 前端nginx上。
前端大量的組件化代碼 可以抽出來復(fù)用,組件化開發(fā)提升效率。
前端與后端是兩個項目。放在兩個不同的服務(wù)器,需要獨立部署。

四:同步和異步的區(qū)別
1,javascript語言是一門“單線程”的語言,
其實同步和異步,
無論如何,做事情的時候都是只有一條流水線(單線程),
同步和異步的差別就在于這條流水線上各個流程的執(zhí)行順序不同。
最基礎(chǔ)的異步是setTimeout和setInterval函數(shù),

五:異步promise
1,自己身上有all、reject、resolve這幾個眼熟的方法,原型上有then、catch等同樣很眼熟的方法。
2,一: 優(yōu)點和缺點
可以將異步操作以同步操作流程的方式表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。此外,Promise對象提供統(tǒng)一的接口,使得控制異步操作更加容易。
3,使用
新建new一個promise,傳入resove和reject兩個參數(shù)分別代表成功失敗的方法。

六:常用的ES6
1,let和const 只在聲明指令的塊級作用域內(nèi)有效。
let所聲明的變量可以改變,const聲明常量,不能改變
2,Object.assign()方法用于對象的合并
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
3,promise對象
4,import 導(dǎo)入模塊
5,字符串拼接
Es6的這種新的“字符串拼接”方法比較簡單,沒有繁瑣的加號和引號,只需要在所需要的字符串“邊界”加上``即可。

var name = "Datura";
var age = 18;
var sex = "nü";
var hobby = "敲代碼";
var str1 = `我是${name},今年${age}歲,性別${sex}的了,愛好${hobby}`; //注意此處有兩個“ `` ”
var str2 = "我是"+name+",今年"+age+"歲,性別"+sex+",愛好"+hobby+""; //這個是原來的寫法
alert(st1r);

6,map對象
let map = new Map();
map.set("a","apple");
map.set("b","banana");
console.log(map); // Map {"a" => "apple", "b" => "banana"}
7,for in循環(huán), for of循環(huán)(不能循環(huán)json數(shù)據(jù))
8,箭頭函數(shù)

var show = function(){
    alert(12);  
};
show();   // 12
const show = () =>{
    alert(12);  
};
show();  // 12 
//個人理解:這里將function關(guān)鍵字去掉然后在“()”后面加一個“=>”

七:app里面的支付功能,分享功能
(可以查看微信開發(fā)文檔)
1,商戶APP調(diào)用微信提供的SDK調(diào)用微信支付模塊,
商戶APP會跳轉(zhuǎn)到微信中完成支付,支付完后跳回到商戶APP內(nèi),最后展示支付結(jié)果。
步驟:
1,用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
創(chuàng)建訂單接口需要的參數(shù):
(1) 交易金額
(2) 交易類型trade_type
JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付,不同trade_type決定了調(diào)起支付的方式,請根據(jù)支付產(chǎn)品正確上傳
(3) 貨幣類型
境內(nèi)商戶號僅支持人民幣
CNY:人民幣
(4) 換算成北京時間為2014年11月11日8時0分0秒。
(5)部分系統(tǒng)取到的值為毫秒級,需要轉(zhuǎn)換成秒(10位數(shù)字)。
(6)商戶訂單號
。微信支付要求商戶訂單號保持唯一性
(7)
2,商戶后臺收到用戶支付單,調(diào)用微信支付統(tǒng)一下單接口。
(需要傳的參數(shù)都有:appid, 隨機(jī)字符串,不長于32位,簽名sign,訂單號,交易時間,訂單金額,)
3,統(tǒng)一下單接口返回正常的prepay_id,生成簽名
4,掉起微信支付,
5,返回支付結(jié)果。
分享功能:
1,先引入weixin.js。 然后通過config接口注入權(quán)限驗證配置

wx.config({
debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。
appId: "", // 必填,公眾號的唯一標(biāo)識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: "", // 必填,生成簽名的隨機(jī)串
signature: "",// 必填,簽名,見附錄1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2

});
通過ready接口處理成功驗證,

wx.ready(function(){
// config信息驗證后會執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行。對于用戶觸發(fā)時才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。

});

八: html5的新特性
1,繪畫的canvas元素
2,video和audio元素
3,本地離線存儲localStorage 和 sessionStorage
4,新的特殊內(nèi)容元素,比如 article、footer、header、nav、section
5,
(1) localStorage和sessionStorage都是用來存儲客戶端臨時信息的對象。
(2) cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
(3) cookie不是很安全,考慮到安全應(yīng)當(dāng)使用session
(4) session會在一定時間內(nèi)保存在服務(wù)器上,當(dāng)訪問增多,會比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie。
(5) 建議將登錄信息等重要信息存放為session,其他信息如果需要保留,可以放在cookie中
localStorage - 用于長久保存整個網(wǎng)站的數(shù)據(jù),保存的數(shù)據(jù)沒有過期時間,直到手動去除。
sessionStorage - 用于臨時保存同一窗口(或標(biāo)簽頁)的數(shù)據(jù),在關(guān)閉窗口或標(biāo)簽頁之后將會刪除這些數(shù)據(jù)。

6,表單新增了輸入類型和驗證
元素規(guī)定輸入域的選項列表。(輸入框底部有提示功能)
type輸入類型Number,placeholder默認(rèn)值,required必填,min 和 max 屬性,設(shè)置元素最小值與最大值。
height 和 width 屬性,用于 image 類型的 標(biāo)簽的圖像高度和寬度。

九:攔截器
統(tǒng)一處理錯誤及配置請求信息
登陸攔截設(shè)置
路由攔截:
1,
1,在定義路由的時候就需要多添加一個自定義字段,
用于判斷該路由的訪問是否需要登錄。如果用戶已經(jīng)登錄,則順利進(jìn)入路由, 否則就進(jìn)入登錄頁面。

{
    path: "/repository",
    name: "repository",
    meta: {
        requireAuth: true,  // 添加該字段,表示進(jìn)入這個路由是需要登錄的
    },
    component: Repository
},

2,用vue-router提供的鉤子函數(shù)beforeEach()對路由進(jìn)行判斷。

router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) {  // 判斷該路由是否需要登錄權(quán)限
    if (store.state.token) {  // 通過vuex state獲取當(dāng)前的token是否存在
        next();
    }
    else {
        next({
            path: "/login",
            query: {redirect: to.fullPath}  // 將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
        })
    }
}
else {
    next();
}

})

第二步:攔截器
要想統(tǒng)一處理所有http請求和響應(yīng),就得用上 axios 的攔截器。通過配置http response inteceptor,當(dāng)后端接口返回401 Unauthorized(未授權(quán)),讓用戶重新登錄。

// http request 攔截器
axios.interceptors.request.use(
config => {
    if (store.state.token) {  // 判斷是否存在token,如果存在的話,則每個http header都加上token
        config.headers.Authorization = `token ${store.state.token}`;
    }
    return config;
},
err => {
    return Promise.reject(err);
});

// http response 攔截器
axios.interceptors.response.use(
response => {
    return response;
},
error => {
    if (error.response) {
        switch (error.response.status) {
            case 401:
                // 返回 401 清除token信息并跳轉(zhuǎn)到登錄頁面
                store.commit(types.LOGOUT);
                router.replace({
                    path: "login",
                    query: {redirect: router.currentRoute.fullPath}
                })
        }
    }
    return Promise.reject(error.response.data)   // 返回接口返回的錯誤信息
});

十:跨域問題
1,jsonp方法
只需配置一個dataType:"jsonp",就可以發(fā)起一個跨域請求。
2, window.name + iframe跨域
3,postMessage跨域
用法:postMessage(data,origin)方法接受兩個參數(shù)
data: html5規(guī)范支持任意基本類型或可復(fù)制的對象,但部分瀏覽器只支持字符串,所以傳參時最好用JSON.stringify()序列化。
origin: 協(xié)議+主機(jī)+端口號,也可以設(shè)置為"*",表示可以傳遞給任意窗口,如果要指定和當(dāng)前窗口同源的話設(shè)置為"/"。
4,WebSocket協(xié)議跨域
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡單、靈活的接口,也對不支持webSocket的瀏覽器提供了向下兼容。

user input:


5,

十一:什么叫優(yōu)雅降級和漸進(jìn)增強(qiáng)?
1,漸進(jìn)增強(qiáng):
先根據(jù)低版本進(jìn)行構(gòu)建頁面,保證最基本的功能。然后再根據(jù)高級瀏覽器進(jìn)行效果,達(dá)到更好的用戶體驗。
2,優(yōu)雅降級:
一開始就構(gòu)建完整的功能,然后在根據(jù)低版本瀏覽器兼容。

十二:對前端界面工程師這個職位是怎么樣理解的?
1,快速高效精準(zhǔn)的完成效果圖,注重用戶體驗。
2,與團(tuán)隊成員,UI,產(chǎn)品經(jīng)理的溝通。
3,寫出優(yōu)美的代碼格式。注釋
4,優(yōu)化頁面

十三:JavaScript 的同源策略
1,同源策略指的是:協(xié)議,域名,端口相同,同源策略是一種安全協(xié)議。
指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。

十四:電商網(wǎng)站如果有大量圖片,怎么去優(yōu)化界面?
1,圖片懶加載,滾動到位置再發(fā)送請求
2,rem,em,px的區(qū)別
使用它們的目的就是為了適應(yīng)各種手機(jī)屏幕。
em:而em是繼承父元素的字體
相對長度的單位,用來設(shè)置文本的字體尺寸的,相對于當(dāng)前對象內(nèi)文本的尺寸,
以上實例em是相對于父級元素div的,div設(shè)置的字體大小為30px,所以0.5em計算后的字體大小為:30px x 0.5 = 15px
3,rem是相對于html元素字體大小的設(shè)置。字體大小是html的值 * 倍數(shù)。
(1) em:

十五:JQUERY篇章
1,選擇器:
CSS 選擇器,ID選擇器,標(biāo)簽選擇器,屬性選擇器$("[href]") 選取所有帶有 href 屬性的元素。
attr(),$("button").click(function(){
alert($("#w3s").attr("href"));
});
2,show(), hide(),fadeIn(), fadeOut(),
3,操作DOM
append() - 在被選元素的結(jié)尾插入內(nèi)容
prepend() - 在被選元素的開頭插入內(nèi)容
after() - 在被選元素之后插入內(nèi)容
before() - 在被選元素之前插入內(nèi)容
remove() - 刪除被選元素(及其子元素)
empty() - 從被選元素中刪除子元素

十六: css篇,定位問題position
1,relative ,相對定位。
如果元素添加了relative,設(shè)置偏移量,元素會有移動但是所占據(jù)的那個位置空間依然還在,也不會擠掉其他的元素。
2,position:absolute,絕對定位。
元素加了絕對定位,在頁面中是不占據(jù)空間的,他會浮動起來。他會相對于他的父元素定位。
如果它的父元素沒有設(shè)置定位,那么就得看它父元素的父元素是否有設(shè)置定位 ,如果還是沒有就繼續(xù)向更高層的祖先元素類推,總之它的定位就是相對于設(shè)置了除static定位之外的定位(比如position:relative)的第一個祖先元素,如果所有的祖先元素都沒有以上三種定位中的其中一種定位,那么它就會相對于文檔body來定位(并非窗口,相對于窗口定位的是fixed)
3,fixed相對于瀏覽器窗口進(jìn)行定位。
4, 1.id選擇器( # myid)

2.類選擇器(.myclassname)
3.標(biāo)簽選擇器(div, h1, p)
4.相鄰選擇器(h1 + p)
5.子選擇器(ul > li)
6.后代選擇器(li a)
7.通配符選擇器( * )
8.屬性選擇器(a[rel = "external"])
9.偽類選擇器(a: hover, li:nth-child)

5,CSS3新增偽類舉例:
p:first-of-type 選擇屬于其父元素的首個

元素的每個

元素。
p:last-of-type 選擇屬于其父元素的最后

元素的每個

元素。
p:only-of-type 選擇屬于其父元素唯一的

元素的每個

元素。
p:only-child 選擇屬于其父元素的唯一子元素的每個

元素。
p:nth-child(2) 選擇屬于其父元素的第二個子元素的每個

元素。
:enabled :disabled 控制表單控件的禁用狀態(tài)。
:checked 單選框或復(fù)選框被選中。
6,css3動畫
(1) @keyframes規(guī)則定義動畫
設(shè)置動畫的名稱, 對關(guān)鍵幀進(jìn)行操作。
動畫至少需要兩個關(guān)鍵幀:一個from關(guān)鍵幀,它是我們動畫的起始狀態(tài),一個to幀,它是它的結(jié)束狀態(tài)。在每個多帶帶的關(guān)鍵幀塊中,我們可以定義要設(shè)置動畫的屬性:

十七:瀏覽器兼容性問題
1,css透明,
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
2,元素水平居中問題
FF: margin:0auto;
IE: 父級{ text-align:center; }
3,頁面的最小高度:
(1)IE不識別min,可以通過js的判斷來添加
4,圖片下有空隙產(chǎn)生
img為display:block
5,

十八: 移動端兼容性問題
1,防止手機(jī)中頁面放大和縮小

2,上下拉動滾動條時卡頓、慢

body
{
    -webkit-overflow-scrolling:touch;
    overflow-scrolling:touch;
}

3,iphone及ipad下輸入框默認(rèn)內(nèi)陰影

element
{
    -webkit-appearance:none;
}

4,click的300ms延遲問題
方案一:禁用縮放,

方案二:安裝第三方依賴包。
npm install fastclick ---save
(2)在入口文件main.js中引入并使用,方法如下:

import fastClick from "fastclick"
fastClick.attach(document.body)

5, 響應(yīng)式圖片
解決方法:讓圖片最大只能是自己的寬度

img{
    max-width: 100%;
    display: block;
    margin: 0 auto;
}

6,輸入框的問題:

var oHeight = $(document).height(); //瀏覽器當(dāng)前的高度   
$(window).resize(function(){
    if($(document).height() < oHeight){
     
    $("#footer").css("position","static");
}else{
     
    $("#footer").css("position","absolute");
}      

});
7,Input 的placeholder會出現(xiàn)文本位置偏上的情況
input 的placeholder會出現(xiàn)文本位置偏上的情況:PC端設(shè)置line-height等于height能夠?qū)R,而移動端仍然是偏上,解決是設(shè)置line-height:normal

十九:flex彈性布局
1,使用flex盒模型來實現(xiàn)兩欄布局,左側(cè)固定200px,右側(cè)自適應(yīng)寬度
父元素: display:flex
子元素1: width:200px; /固定寬度/
子元素2: flex: 1; /這里設(shè)置為占比1,填充滿剩余空間/
2,容器的屬性6個:
(1) flex-direction決定主軸的方向(即項目排列的方向)

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}

row(默認(rèn)值):主軸為水平方向,起點在左端。
row-reverse:主軸為水平方向,起點在右端。
column:主軸為垂直方向,起點在上沿。
column-reverse:主軸為垂直方向,起點在下沿。
(2) flex-wrap屬性
默認(rèn)情況下,項目都排在一條線(又稱”軸線”)上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。

.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}    

nowrap: 不換行
wrap: 換行,第一行在上方。
wrap-reverse: 換行,第一行在上方
(3) flex-flow:
是flex-direction和flex-wrap的簡寫形式,默認(rèn)值row, nowrap
(4) justify-content屬性
定義了項目在主軸上的對齊方式

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}  
//flex-start左對齊, flex-end右對齊,  center居中對齊, space-between兩端對齊中間間隔相等
//space-around:每個項目兩側(cè)的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。

(5) align-items屬性
定義項目在縱向?qū)R方式

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

(6)align-content屬性
定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around |         stretch;
}

3,項目屬性,不常用

order
flex-grow
flex-shrink
flex-basis
flex
align-self

4,flex屬性
是flex-grow, flex-shrink 和 flex-basis的簡寫,默認(rèn)值為0 1 auto。后兩個屬性可選。

二十:vuex
vuex就是把組件的共享狀態(tài)提取出來,以一個全局方式管理。
任何組件都可以獲取狀態(tài)或者觸發(fā)行為。vuex就是專門為vue設(shè)計的狀態(tài)管理庫。
1,state
定義初始化狀態(tài)變量。
改變state中的狀態(tài)唯一方式就是顯示的提交(commit) mutation.
2,getters
可以監(jiān)聽state里面值的變化。有時候我們需要從state中派生出一些狀態(tài)
,例如對列表過濾。類似于計算屬性。
可以以屬性的形式訪問這些值
store.getters.doneTodos // -> [{ id: 1, text: "...", done: true }]
3,mutation
改變state中狀態(tài)的唯一方法就是顯示提交mutations。是同步的
4,action方法
action類似于mutation不同在于:
(1) action提交mutation,而不是直接變更狀態(tài)
(2) action可以包含任意異步操作。
使用方式:

  const mutations ={
      increment(state){
        return state.count++;
      }
   };
   const actions = {
      increment(context){
        context.commit("increment");
      }
   };
//在組件中使用 this.$store.dispatch("xxx") 分發(fā) action

二十一:移動端打包問題
打包安卓apk過程:
(1),基本依賴環(huán)境
nodejs環(huán)境
jdk(java的開發(fā)基礎(chǔ)類庫,因為 android )
SDK(安卓開發(fā)集成包,集成了安卓的開發(fā)工具,插件,API等等)
(2),環(huán)境配置
nodejs
jdk (無需配置環(huán)境變量)
sdk (需要配置環(huán)境變量)
gradle安裝
安裝ionic和cordova
全局安裝ionic和cordova(IONIC是UI,cordova負(fù)責(zé)打包成apk,并且可以調(diào)用原生安卓的各種API)
(3)打包
ionic cordova build android --release
如若你聰慧的雙眼發(fā)現(xiàn)如下字眼:Build Success! 說明你已經(jīng)成功打包了。耐心等待,命令行結(jié)束會提示你apk的生成位置
給包生成簽名
2,移動端Mint UI。基于 Vue.js 的移動端組件庫
(1)包案豐富的css和js組件。

二十二: js篇基礎(chǔ)
1,事件委托
把綁定到子元素的事件 委托到父元素上,原理就是事件冒泡

事件委托的優(yōu)點?
(1) 因為每一個函數(shù)都是一個對象,對象越多,內(nèi)存占有率就越大,自然性能就越差,使用事件委托,只需要在其父元素中定義一個事件就可以。
(3) 減少事件注冊,比如在ul上代理所有l(wèi)i的click事件就非常棒

  • item 1
  • item 2
  • item 3
  • ......
  • item n
// ...... 代表中間還有未知數(shù)個 li。 如果給每個li列表項都綁定一個函數(shù),那對內(nèi)存的消耗是非常大的, 因此較好的解決辦法就是將li元素的點擊事件綁定到它的父元素ul身上,執(zhí)行事件的時候再去匹配判斷目標(biāo)元素。

可以實現(xiàn)當(dāng)新增子對象時無需再次對其綁定(動態(tài)綁定事件)

實現(xiàn)方式用:event.target可以判定當(dāng)前點擊的目標(biāo)對象

2, 適合事件委托的事件有:

click,
mousedown,
mouseup,
keydown,
keyup,
keypress

3, this作用域問題
(1) this總是指向調(diào)用它所在方法的對象。
this是在函數(shù)生成的時候,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用。
(2) 全局函數(shù)調(diào)用
this代表的全局對象window。
(3) 對象方法的調(diào)用
如果函數(shù)作為對象的方法調(diào)用,this指向的是這個上級對象,即調(diào)用方法的對象。
(4) 構(gòu)造函數(shù)的調(diào)用
構(gòu)造函數(shù)中的this指向新創(chuàng)建的對象本身。

3,冒泡排序
(1) 原理:
依次比較相鄰的兩個值,如果后面的比前面的小,則將小的元素排到前面。依照這個規(guī)則進(jìn)行多次并且遞減的迭代,直到順序正確
(2) 實現(xiàn)方法:

4,閉包
(1) 如何從外部讀取局部變量?
在函數(shù)的內(nèi)部,再定義一個函數(shù)。

 function f1(){
       n = 999;
       function f2(){
           console.log(n);  //999
       }
   }

在上面的代碼中,函數(shù)f2就被包括在函數(shù)f1內(nèi)部,

這時f1內(nèi)部的所有局部變量,對f2都是可見的。但是反過來就不行,
f2內(nèi)部的局部變量對f1就是不可見的。
這就是javascript語言特有的‘鏈?zhǔn)阶饔糜颉Y(jié)構(gòu)(chain scope),子對象會一級一級地向上尋找所有父對象的變
量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。

既然f2可以讀取f1中的局部變量,那么只要把f2作為返回值,我們就可以在f1外部讀取它的內(nèi)部變量了。

   function f1(){
       n = 999;
       function f2(){
           console.log(n);
       }
       return f2;

   }
   var result = f1();  //返回的是f2函數(shù)
   result();  //999

(2) 閉包的概念:
上一節(jié)代碼中的f2函數(shù)就是閉包。
閉包可以簡單理解成:
定義在一個函數(shù)內(nèi)部的函數(shù),
本質(zhì)上閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接的一座橋梁。

(3)閉包的用途:
一個是前面提到的可以讀取函數(shù)內(nèi)部的變量
另一個就是讓這些變量的值始終保持在內(nèi)存中。

 function f1(){
       var n = 999;
       nAdd = function(){
           n += 1;
       }
       function f2(){
           console.log(n);
       }
       return f2;
   }
   var result = f1();
   result();  //從函數(shù)外部通過閉包f2獲取到函數(shù)f1內(nèi)部局部變量的值
   nAdd();  //從函數(shù)外部通過閉包修改局部變量n的值
   result();  //再次通過閉包f2獲取到函數(shù)f1內(nèi)部局部變量的值  
   //console.log出的值是, 999, 1000

(4) 使用閉包的注意點:
1>由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存泄露。解決方法時,在退出函數(shù)之前,將不使用的局部變量全部刪除。

2>閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。所以,如果你把父函數(shù)當(dāng)作對象(object)使用,把閉包當(dāng)作它的公用方法,把內(nèi)部變量當(dāng)作它的私有屬性,這時一定要小心,不要隨便改變父函數(shù)內(nèi)部變量的值。

5,JS繼承
(1) 屬性繼承
就是將對象的成員復(fù)制一份給需要繼承的對象
存在問題:
父構(gòu)造函數(shù)的原型對象和子構(gòu)造函數(shù)的原型對象上的成員有共享問題
只能繼承父構(gòu)造函數(shù)的原型對象上的成員, 不能繼承父構(gòu)造函數(shù)的實例對象的成員
(2) 原型鏈繼承
prototype 英[?pr??t?ta?p]
即 子構(gòu)造函數(shù).prototype = new 父構(gòu)造函數(shù)()

(3) 借用構(gòu)造函數(shù)

 // 創(chuàng)建父構(gòu)造函數(shù)
function Person(name){
  this.name = name;
  this.freinds = ["小王", "小強(qiáng)"];
  this.showName = function(){
     console.log(this.name);
  }
}
// 創(chuàng)建子構(gòu)造函數(shù)
 function Student(name){
  // 使用call借用Person的構(gòu)造函數(shù)
  Person.call(this, name);
 }
 // 測試是否有了 Person 的成員
 var stu = new Student("Li");
 stu.showName(); // Li
 console.log(stu.friends); // ["小王","小強(qiáng)"]

使用call和apply借用其他構(gòu)造函數(shù)的成員, 可以解決給父構(gòu)造函數(shù)傳遞參數(shù)的問題, 但是獲取不到父構(gòu)造函數(shù)原型上的成員.也不存在共享問題

(4) 組合繼承 (構(gòu)造函數(shù) + 原型式繼承)
(5) 借用構(gòu)造函數(shù) + 深拷貝

function Person(name,age){
    this.name = name;
    this.age = age;
    this.showName = function(){
        console.log(this.name);
    }
}
Person.prototype.friends = ["小王","小強(qiáng)","小王八"];
function Student(name,25){
    // 借用構(gòu)造函數(shù)(Person)
    Person.call(this,name,25);
}
// 使用深拷貝實現(xiàn)繼承
deepCopy(Student.prototype,Person.prototype);
Student.prototype.constructor = Student;

6:BOM
(1) BOM的核心對象是window,它表示瀏覽器的一個實例。
(2) 全局作用域:
在全局作用域中生成的變量,函數(shù)都是window的屬性和方法。
全局變量與在window對象上直接定義的屬性還是有一些差別,
全局變量不能通過delete刪除,window對象可以。
(3) window對象有以下方法:

open 
close 
alert 
setTimeout 
clearTimeout 
setInterval 
clearInterval 
moveBy 
moveTo 
resizeBy 
resizeTo 
scrollBy 
scrollTo 
find 
back 
forward 
home 
stop 
print 
blur 
focus 
handleEvent 
releaseEvent 
routeEvent 
scroll

(4) http狀態(tài)碼
200:請求成功
404:請求的資源不存在
500:內(nèi)部服務(wù)器錯誤
5XX服務(wù)端錯誤:
501,502,503,504,505
4XX客戶端錯誤
401,402,403
304: 對客戶端有緩存的情況下,服務(wù)端的一種響應(yīng)。
403: 表示對請求資源的訪問被服務(wù)器拒絕
401: 表示發(fā)送的請求需要有通過 HTTP 認(rèn)證的認(rèn)證信息

7:數(shù)組的哪些方法會改變原數(shù)組?那些不會?
(1) 變原數(shù)組:

pop()   刪除最后一個元素并把長度減一
shift() 數(shù)組的第一個元素被刪除
shift(0,1) 0: 開始的索引,1:要刪除的個數(shù)。
push()  添加元素

(2) 不改變原數(shù)組

concat() 連接多個數(shù)組,返回新的數(shù)組
slice()   
foreach()
     


二十三: vue篇
1,簡述Vue的響應(yīng)式原理

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104783.html

相關(guān)文章

  • 思維導(dǎo)圖整理大廠面試高頻數(shù)組24: 合并兩個有序數(shù)組的兩種雙指針?biāo)枷? 力扣88

    摘要:此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn)當(dāng)然也會加上我對導(dǎo)圖的詳解目的是為了更方便快捷的記憶和回憶算法重點不用每次都重復(fù)看題解畢竟算法不是做了一遍就能完全記住的所 ...

    darkerXi 評論0 收藏0
  • ??導(dǎo)圖整理大廠面試高頻數(shù)組8: 移除元素的雙指針優(yōu)化, 力扣27??

    此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當(dāng)然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進(jìn)一步加強(qiáng)理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...

    zhangyucha0 評論0 收藏0
  • ??思維導(dǎo)圖整理大廠面試高頻數(shù)組10: 3種方法徹底解決中位數(shù)問題, 力扣4??

    此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當(dāng)然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進(jìn)一步加強(qiáng)理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...

    XanaHopper 評論0 收藏0
  • 計算機(jī)秋招必備!杭州互聯(lián)網(wǎng)大廠企業(yè)整理清單!

    摘要:截至年月日零時,杭州市常住人口為萬人。年,杭州市實現(xiàn)地區(qū)生產(chǎn)總值億元。阿里巴巴對杭州的影響巨大,一線的七個企業(yè)中,有四個企業(yè)都是阿里巴巴大集團(tuán)下的。 歡迎持續(xù)關(guān)注我...

    morgan 評論0 收藏1
  • 聊聊GC

    摘要:復(fù)制這一工作所花費的時間,在對象存活率達(dá)到一定程度時,將會變的不可忽視。針對老年代老年代的特點是區(qū)域較大,對像存活率高。這種情況,存在大量存活率高的對像,復(fù)制算法明顯變得不合適。 GC(Garbage Collection)即Java垃圾回收機(jī)制,是Java與C++的主要區(qū)別之一,作為Java開發(fā)者,一般不需要專門編寫內(nèi)存回收和垃圾清理代碼,對內(nèi)存泄露和溢出的問題,也不需要像C++程序...

    developerworks 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<