兼容性問題:
一橘茉、CSS兼容性
1.felx布局在iOS8上有問題工腋。解決:加-webkit前綴
2.ie6、7和遨游里這個(gè)標(biāo)簽的高度不受控制畅卓,超出自己設(shè)置的高度 擅腰。解決:給超出高度的標(biāo)簽設(shè)置overflow:hidden;或者設(shè)置行高line-height 小于你設(shè)置的高度。
3.幾個(gè)img標(biāo)簽放在一起的時(shí)候翁潘,有些瀏覽器會(huì)有默認(rèn)的間距趁冈,加了問題一中提到的通配符也不起作用。解決:使用float屬性為img布局
4.透明度的兼容css設(shè)置:ie6認(rèn)識(shí)的hacker 是下劃線_ 和星號(hào) *? ie7 遨游認(rèn)識(shí)的hacker是星號(hào)?*
5.不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)丁和內(nèi)補(bǔ)丁不同拜马,即隨便寫幾個(gè)標(biāo)簽渗勘,不加樣式控制的情況下,各自的margin 和padding差異較大俩莽。 解決:?*{margin:0;padding:0;}
6.塊屬性標(biāo)簽float后旺坠,又有橫行的margin情況下,在IE6顯示margin比設(shè)置大扮超。解決:在float的標(biāo)簽樣式控制中加入 display:inline;將其轉(zhuǎn)化為行內(nèi)屬性
7.行內(nèi)屬性標(biāo)簽取刃,設(shè)置display:block后采用float布局,又有橫行的margin的情況出刷,IE6間距bug璧疗。解決:在display:block;后面加入display:inline;display:table;
8.標(biāo)簽最低高度設(shè)置min-height不兼。解決:如果我們要設(shè)置一個(gè)標(biāo)簽的最小高度200px馁龟,需要進(jìn)行的設(shè)置為:{min-height:200px; height:auto !important; height:200px; overflow:visible;}
9.谷歌瀏覽器不支持字體小于12px崩侠。解決:可以使用css3屬性對(duì)文字進(jìn)行縮放處理,使用transform:scale()屁柏。
10.IE6,IE7不能隱藏(overflow:hidden)絕對(duì)定位溢出的內(nèi)容啦膜;解決:哪個(gè)需要設(shè)置overflow;hidden淌喻,生效僧家,就在哪個(gè)父級(jí)上面設(shè)置position:relative;
11.谷歌、ie瀏覽器默認(rèn)空格( )寬度不一的問題裸删。解決:設(shè)置相同字體 font-family:"宋體";
12.<div class="clear"></div>在ie6中存在默認(rèn)空白問題八拱;解決:.clear{font-size:0;line-height:0;height:0;}
13.塊級(jí)元素上加懸停在ie6上不顯示;
解決:
body{? behavior:url(csshover.htc);}
<!--[if lte IE 6]>? <![endif]-->?
IE6及其以下版本可見?
<!--[if lte IE 7]>? <![endif]-->?
IE7及其以下版本可見?
<!--[if IE 6]>????? <![endif]-->?
只有IE6版本可見?
<![if !IE]>???????? <![endif]>?
除了IE以外的版本?
<!--[if lt IE 8]>?? <![endif]-->?
IE8及其以下的版本可見?
<!--[if gte IE 7]>? <![endif]-->?
IE7及其以下的版本可見
14.png-24格式的背景圖片在ie6中顯示灰色涯塔;解決:
< !--[if IE 6]>
<script src="DD_belatedPNG.js"></script><script> DD_belatedPNG.fix('.png_bg');</script>
<![endif]-->
15.圓形頭像的制作兼容
圓形頭像的制作原理就是在頭像上覆蓋一張透明的圖片肌稻,把四個(gè)角顏色設(shè)置成頁(yè)面的背景顏色,中間透明匕荸。
這里需要注意的是需要把圖片保存成24位的png爹谭,雖然IE6支持8位的png的透明,但是8位的png做透明圓弧圖片存在效果上的問題榛搔,就是存在白色的雜邊或鋸齒诺凡。24位的png或32位的png的圓弧透明(半透明)圖片則非常光滑,但是該死的IE6不支持24位的png或32位的png透明(其他瀏覽器都支持)践惑,需要我們額外的一下處理腹泌;使用 AlphaImageLoader就可以解決IE6不能顯示24位和32位PNG的透明,
但使用 AlphaImageLoader 篩選器的元素必須有寬高尔觉,width:XXpx; height:XXpx;ie6下必須充值背景為none凉袱,_background:none
<style>
#test{position:relative; top:0; left:0;width:300px;height:300px;background:#000;}
#test span{position:absolute; top:0; left:0;width:200px;height:200px;background:url("路徑/中間透明的圖片.png");color:#fff;_background:none;_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="路徑/中間透明的圖片.png",sizingMethod="crop"); display:block;}
</style>
<div id="test"><img src="圖片地址" width="200" height="200" /><span></span></div>
16.使三列、兩列div背景等高
補(bǔ)差等高法
<div class="content">
<div class="left"></div>
<div class="right"></div>
</div>
.content{overflow:hidden;}
.left, .right{margin-bottom:-10000px;padding-bottom:10000px;}
這也是負(fù)margin的一個(gè)應(yīng)用侦铜。這種方法是有一個(gè)缺點(diǎn)专甩,就是當(dāng)其中有出現(xiàn)錨點(diǎn)的時(shí)候,會(huì)出現(xiàn)錨點(diǎn)跳轉(zhuǎn)錯(cuò)位的問題钉稍。
可能有的公司也會(huì)不讓使用這個(gè)方法配深,因?yàn)閙argin、padding數(shù)值過大嫁盲;
還有種折中的方法是使用背景圖片達(dá)到頁(yè)面基本的等高篓叶,這個(gè)大家應(yīng)該懂得吧。
17.谷歌瀏覽器css hack解決(只有谷歌羞秤、蘋果瀏覽器識(shí)別)
??? @media screen and (-webkit-min-device-pixel-ratio:0) {??
???? /*這里放新建的CSS選擇器*/?
???? }?
二缸托、JS兼容性
1. children與childNodes
IE提供的children、childNodes和firefox下的childNodes的行為是有區(qū)別的瘾蛋,firefox下childNodes會(huì)把換行和空白字符都算作父節(jié)點(diǎn)的子節(jié)點(diǎn)俐镐,而IE的childNodes和children不會(huì)。比如:
<div id="dd">
<div>yizhu2000</div>
</div>
d為dd的div在IE下用childNodes查看哺哼,其子節(jié)點(diǎn)數(shù)為1佩抹,而ff下為三叼风,我們可以從firefox的dom查看器里面看到他的childNodes為["\n ", div, "\n"]。
要在firefox下模擬children的屬性我們可以這樣做:
if (typeof(HTMLElement) != "undefined" && !window.opera) {
HTMLElement.prototype.__defineGetter__("children", function() {
for (var a = [], j = 0, n, i = 0; i < this.childNodes.length; i++) {
n = this.childNodes[i];
if (n.nodeType == 1) {
a[j++] = n;
if (n.name) {
if (!a[n.name])
a[n.name] = [];
a[n.name][a[n.name].length] = n;
}
if (n.id)
a[n.id] = n;
}
}
return a;
});
}
2. firefox和ie的事件
window.event只能在IE下使用棍苹,而不能用在Firefox下无宿,這是因?yàn)镕irefox的event只能在事件發(fā)生的現(xiàn)場(chǎng)使用。 Firefox必須從源處加入event作參數(shù)傳遞枢里。IE忽略該參數(shù)孽鸡,用window.event來(lái)讀取該event。
比方說(shuō)下面這個(gè)在ie下獲得鼠標(biāo)位置的方法:
<button onclick="onClick()" >獲得鼠標(biāo)點(diǎn)擊橫坐標(biāo)</button>
<script type="text/javascript">
function onclick(){
alert(event.clientX);
}
</script>
需要改成
<button onclick="onClick(event)">獲得OuterHTML</button>
<script type="text/javascript">
function onclick(event){
event = event || window.event;
alert(event.clientX);
}
</script>
var eventObj=ev||event
才能在兩種瀏覽器下使用
3.HTML對(duì)象獲取問題
FireFox獲取方式document.getElementById("idName")
ie使用document.idname或者document.getElementById("idName")
解決辦法:統(tǒng)一使用document.getElementById("idName");
4. const問題
在Firefox下栏豺,可以使用const關(guān)鍵字或var關(guān)鍵字來(lái)定義常量彬碱;
IE下,只能使用var關(guān)鍵字來(lái)定義常量奥洼;
解決方法:統(tǒng)一使用var關(guān)鍵字來(lái)定義常量巷疼。
5.frame問題
以下面的frame為例:
1<frame src="xxx.html" id="frameId" name="frameName" />
a)訪問frame對(duì)象
IE:使用window.frameId或者window.frameName來(lái)訪問這個(gè)frame對(duì)象,frameId和frameName可以同名灵奖;
Firefox:只能使用window.frameName來(lái)訪問這個(gè)frame對(duì)象皮迟;
另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")來(lái)訪問這個(gè)frame對(duì)象桑寨;
b) 切換frame內(nèi)容
在 IE和Firefox中都可以使用
window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"
來(lái)切換frame的內(nèi)容伏尼;
如果需要將frame中的參數(shù)傳回父窗口(注意不是opener,而是parent)尉尾,可以在frame中使用parent來(lái)訪問父窗口爆阶。例如:
parent.document.form1.filename.value="Aqing";
6. body問題
Firefox的body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標(biāo)簽被瀏覽器完全讀入之后才存在沙咏;
7. firefox與IE的父元素(parentElement)的區(qū)別
IE:obj.parentElement
firefox:obj.parentNode
解決方法:因?yàn)閒irefox與IE都支持DOM辨图,因此全部使用obj.parentNode
8.innerText的問題
innerText在IE中能正常工作,但是innerText在FireFox中卻不行肢藐,需用textContent故河;
解決方法:innerHTML
if (navigator.appName.indexOf("Explorer") > -1) {
document.getElementById('element').innerText = "my text";
} else {
document.getElementById('element').textContent = "my text";
}
9.AJAX獲取XMLHTTP的區(qū)別
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} elseif (window.ActiveXObject) { // IE的獲取方式
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
注意:在IE中,xmlhttp.send(content)方法的content可以為空吆豹,而firefox則不能為null鱼的,應(yīng)該用send(""),否則會(huì)出現(xiàn)411錯(cuò)誤痘煤。
var xhr=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP)
10. event.x與event.y問題
? (1)現(xiàn)有問題:在IE中凑阶,event對(duì)象有x,y 屬性,F(xiàn)irefox中沒有衷快。
? (2)解決方法:在Firefox中宙橱,與event.x 等效的是 event.pageX。可以使用:
? ? ? mX = event.x ? event.x : event.pageX;
GIT問題總結(jié)
1.CVS及SVN都是集中式的版本控制系統(tǒng)师郑,而Git是分布式版本控制系統(tǒng)
2.分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同:集中式版本控制系統(tǒng)环葵,版本庫(kù)是集中存放在中央服務(wù)器的,而干活的時(shí)候宝冕,用的都是自己的電腦张遭,所以要先從中央服務(wù)器取得最新的版本,然后開始干活猬仁,干完活了,再把自己的活推送給中央服務(wù)器先誉。集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作湿刽,如果在局域網(wǎng)內(nèi)還好,帶寬夠大褐耳,速度夠快诈闺,可如果在互聯(lián)網(wǎng)上,遇到網(wǎng)速慢的話铃芦,可能提交一個(gè)10M的文件就需要5分鐘雅镊。
分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù)刃滓,這樣仁烹,你工作的時(shí)候,就不需要聯(lián)網(wǎng)了咧虎,因?yàn)榘姹編?kù)就在你自己的電腦上卓缰。分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù)砰诵,某一個(gè)人的電腦壞掉了不要緊征唬,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題茁彭,所有人都沒法干活了总寒。分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來(lái)方便“交換”大家的修改
3.安裝
(1)下載安裝
(2)$ git config --global user.name "Your Name"? $ git config --global user.email "email@example.com"
(3)通過git init命令把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù) 發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè).git的目錄理肺,這個(gè)目錄是Git來(lái)跟蹤管理版本庫(kù)的 如果你沒有看到.git目錄摄闸,那是因?yàn)檫@個(gè)目錄默認(rèn)是隱藏的,用ls -ah命令就可以看見
(4)添加文件到Git倉(cāng)庫(kù)妹萨,分兩步:
第一步贪薪,使用命令git add <file>,注意眠副,可反復(fù)多次使用画切,添加多個(gè)文件;
第二步囱怕,使用命令git commit霍弹,完成毫别。
git status命令可以讓我們時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài)
git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式
git log命令顯示從最近到最遠(yuǎn)的提交日志典格,我們可以看到3次提交,有時(shí)間戳? 如果嫌輸出信息太多岛宦,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù)? 你看到的一大串類似3628164...882e1e0的是commit id(版本號(hào))
版本回退
git? reset? 版本回滾? --hard? Git的版本回退速度非乘=桑快砾肺,因?yàn)镚it在內(nèi)部有個(gè)指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時(shí)候防嗡,Git僅僅是把HEAD從指向append GPL改為指向add distributed 然后順便把工作區(qū)的文件更新了
git reflog用來(lái)記錄你的每一次命令
工作區(qū)和暫存區(qū)
Git和其他版本控制系統(tǒng)如SVN的一個(gè)不同之處就是有暫存區(qū)的概念
工作區(qū)有一個(gè)隱藏目錄.git变汪,這個(gè)不算工作區(qū),而是Git的版本庫(kù)
Git的版本庫(kù)里存了很多東西蚁趁,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)裙盾,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD他嫡。
git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別
管理修改
git checkout -- file可以丟棄工作區(qū)的修改
命令git checkout -- readme.txt意思就是番官,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū)钢属,現(xiàn)在徘熔,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài);
一種是readme.txt已經(jīng)添加到暫存區(qū)后淆党,又作了修改近顷,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)宁否。
總之窒升,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)。
撤銷修改
git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)慕匠,重新放回工作區(qū)
git checkout其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本饱须,無(wú)論工作區(qū)是修改還是刪除,都可以“一鍵還原”台谊。
刪除文件
命令git rm用于刪除一個(gè)文件蓉媳。如果一個(gè)文件已經(jīng)被提交到版本庫(kù),那么你永遠(yuǎn)不用擔(dān)心誤刪锅铅,但是要小心酪呻,你只能恢復(fù)文件到最新版本,你會(huì)丟失最近一次提交后你修改的內(nèi)容盐须。
添加遠(yuǎn)程庫(kù)
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù)玩荠,使用命令git remote add origin git@server-name:path/repo-name.git;
關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容阶冈;
此后闷尿,每次本地提交后,只要有必要女坑,就可以使用命令git push origin master推送最新修改填具;
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫(kù)的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作匆骗,而SVN在沒有聯(lián)網(wǎng)的時(shí)候是拒絕干活的劳景!當(dāng)有網(wǎng)絡(luò)的時(shí)候,再把本地提交推送一下就完成了同步碉就,真是太方便了盟广!
從遠(yuǎn)程庫(kù)克隆
要克隆一個(gè)倉(cāng)庫(kù),首先必須知道倉(cāng)庫(kù)的地址铝噩,然后使用git clone命令克隆衡蚂。
Git支持多種協(xié)議窿克,包括https骏庸,但通過ssh支持的原生git協(xié)議速度最快
創(chuàng)建與合并分支
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
解決沖突
當(dāng)Git無(wú)法自動(dòng)合并分支時(shí),就必須首先解決沖突年叮。解決沖突后具被,再提交,合并完成只损。
用git log --graph命令可以看到分支合并圖一姿。
分支管理策略
Git分支十分強(qiáng)大,在團(tuán)隊(duì)開發(fā)中應(yīng)該充分應(yīng)用跃惫。
合并分支時(shí)叮叹,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支爆存,能看出來(lái)曾經(jīng)做過合并蛉顽,而fast forward合并就看不出來(lái)曾經(jīng)做過合并。
Bug分支
當(dāng)手頭工作沒有完成時(shí)先较,先把工作現(xiàn)場(chǎng)git stash一下携冤,然后去修復(fù)bug,修復(fù)后闲勺,再git stash pop曾棕,回到工作現(xiàn)場(chǎng)。
需要恢復(fù)菜循,有兩個(gè)辦法:
一是用git stash apply恢復(fù)翘地,但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來(lái)刪除子眶;
另一種方式是用git stash pop瀑凝,恢復(fù)的同時(shí)把stash內(nèi)容也刪了:
Feature分支
開發(fā)一個(gè)新feature,最好新建一個(gè)分支臭杰;
如果要丟棄一個(gè)沒有被合并過的分支粤咪,可以通過git branch -D <name>強(qiáng)行刪除。
多人協(xié)作
要查看遠(yuǎn)程庫(kù)的信息渴杆,用git remote? 用git remote -v顯示更詳細(xì)的信息
在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支寥枝,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致
多人協(xié)作的工作模式通常是這樣:
1.首先磁奖,可以試圖用git push origin branch-name推送自己的修改囊拜;
2.如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新比搭,需要先用git pull試圖合并冠跷;
3.如果合并有沖突,則解決沖突身诺,并在本地提交蜜托;
4.沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功霉赡!
如果git pull提示“no tracking information”橄务,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name穴亏。
創(chuàng)建標(biāo)簽
命令git tag <name>用于新建一個(gè)標(biāo)簽蜂挪,默認(rèn)為HEAD,也可以指定一個(gè)commit id嗓化;
git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息棠涮;
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標(biāo)簽;? 簽名采用PGP簽名刺覆,因此严肪,必須首先安裝gpg(GnuPG),如果沒有找到gpg隅津,或者沒有g(shù)pg密鑰對(duì)诬垂,就會(huì)報(bào)錯(cuò)
用命令git show <tagname>可以看到說(shuō)明文字
命令git tag可以查看所有標(biāo)簽。
操作標(biāo)簽
命令git push origin <tagname>可以推送一個(gè)本地標(biāo)簽伦仍;
命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽结窘;
命令git tag -d <tagname>可以刪除一個(gè)本地標(biāo)簽;
命令git push origin :refs/tags/<tagname>可以刪除一個(gè)遠(yuǎn)程標(biāo)簽充蓝。
使用GitHub
在GitHub上隧枫,可以任意Fork開源倉(cāng)庫(kù)喉磁;(git clone git@github.com:michaelliao/bootstrap.git)
自己擁有Fork后的倉(cāng)庫(kù)的讀寫權(quán)限;
可以推送pull request給官方倉(cāng)庫(kù)來(lái)貢獻(xiàn)代碼
在本地庫(kù)上使用命令git remote add把它和碼云的遠(yuǎn)程庫(kù)關(guān)聯(lián):git remote add origin/git remote add github/git remote add gitee
刪除已關(guān)聯(lián)的名為origin的遠(yuǎn)程庫(kù):git remote rm origin
用git remote -v查看遠(yuǎn)程庫(kù)信息
忽略特殊文件
忽略某些文件時(shí)官脓,需要編寫.gitignore协怒;
.gitignore文件本身要放到版本庫(kù)里,并且可以對(duì).gitignore做版本管理
.gitignore寫得有問題卑笨,需要找出來(lái)到底哪個(gè)規(guī)則寫錯(cuò)了孕暇,可以用git check-ignore命令檢查
配置別名
用st表示status:git config --global alias.st status? 加上--global是針對(duì)當(dāng)前用戶起作用的,如果不加赤兴,那只針對(duì)當(dāng)前的倉(cāng)庫(kù)起作用
搭建Git服務(wù)器
搭建Git服務(wù)器非常簡(jiǎn)單妖滔,通常10分鐘即可完成力细;
要方便管理公鑰水慨,用Gitosis狞甚;
要像SVN那樣變態(tài)地控制權(quán)限审姓,用Gitolite。
第一步素跺,安裝git
第二步顷霹,創(chuàng)建一個(gè)git用戶熊赖,用來(lái)運(yùn)行g(shù)it服務(wù)
第三步疲牵,創(chuàng)建證書登錄
第四步承二,初始化Git倉(cāng)庫(kù)
第五步,禁用shell登錄
第六步瑰步,克隆遠(yuǎn)程倉(cāng)庫(kù)
管理公鑰
如果團(tuán)隊(duì)很小矢洲,把每個(gè)人的公鑰收集起來(lái)放到服務(wù)器的/home/git/.ssh/authorized_keys文件里就是可行的璧眠。如果團(tuán)隊(duì)有幾百號(hào)人缩焦,就沒法這么玩了,這時(shí)责静,可以用Gitosis來(lái)管理公鑰袁滥。
管理權(quán)限
有很多不但視源代碼如生命,而且視員工為竊賊的公司灾螃,會(huì)在版本控制系統(tǒng)里設(shè)置一套完善的權(quán)限控制题翻,每個(gè)人是否有讀寫權(quán)限會(huì)精確到每個(gè)分支甚至每個(gè)目錄下。因?yàn)镚it是為L(zhǎng)inux源代碼托管而開發(fā)的腰鬼,所以Git也繼承了開源社區(qū)的精神嵌赠,不支持權(quán)限控制。不過熄赡,因?yàn)镚it支持鉤子(hook)姜挺,所以,可以在服務(wù)器端編寫一系列腳本來(lái)控制提交等操作彼硫,達(dá)到權(quán)限控制的目的炊豪。Gitolite就是這個(gè)工具凌箕。
閉包
閉包的作用就是在a執(zhí)行完并返回后,閉包使得Javascript的垃圾回收機(jī)制GC不會(huì)收回a所占用的資源词渤,因?yàn)閍的內(nèi)部函數(shù)b的執(zhí)行需要依賴a中的變量牵舱。使用閉包主要是為了設(shè)計(jì)私有的方法和變量,閉包的優(yōu)點(diǎn)是可以避免全局變量的污染缺點(diǎn)是閉包會(huì)常駐內(nèi)存缺虐,會(huì)增加內(nèi)存使用量芜壁,使用不當(dāng)容易造成內(nèi)存泄漏,在JS中高氮,函數(shù)即閉包沿盅,只有函數(shù)才會(huì)產(chǎn)生作用域的概念。
閉包的三個(gè)特征:1.函數(shù)嵌套函數(shù)? 2.函數(shù)內(nèi)部可以引用外部的參數(shù)和變量? 3.參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收纫溃。
vue中微博的分享鏈接腰涧。可以用a標(biāo)簽的href屬性實(shí)現(xiàn)紊浩,<a href=""
target="_blank"><img src="" alt="wechat">
a標(biāo)簽實(shí)現(xiàn)打電話功能就是在href=“tel”郵件是mailto: 短信是sms
世界主流瀏覽器及內(nèi)核:IE trident firefox:gecko safari :webkit opera:presto