您好,登錄后才能下訂單哦!
JavaScript(簡稱“JS”) 是一種具有函數(shù)優(yōu)先的輕量級,解釋型或即時編譯型的高級編程語言。雖然它是作為開發(fā)Web頁面的腳本語言而出名的,但是它也被用到了很多非瀏覽器環(huán)境中,JavaScript 基于原型編程、多范式的動態(tài)腳本語言,并且支持面向?qū)ο?、命令式和聲明式(如函?shù)式編程)風(fēng)格。
JavaScript在1995年由Netscape公司的Brendan Eich,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計實現(xiàn)而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風(fēng)格與Self及Scheme較為接近。
JavaScript的標(biāo)準(zhǔn)是ECMAScript 。截至 2012 年,所有瀏覽器都完整的支持ECMAScript 5.1,舊版本的瀏覽器至少支持ECMAScript 3 標(biāo)準(zhǔn)。2015年6月17日,ECMA國際組織發(fā)布了ECMAScript 的第六版,該版本正式名稱為 ECMAScript 2015,但通常被稱為ECMAScript 6 或者ES6。
JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現(xiàn)自身的功能的。
是一種解釋性腳本語言(代碼不進(jìn)行預(yù)編譯)。
主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結(jié)構(gòu)和行為的分離。
跨平臺特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
Javascript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運算符及程序的基本程序框架。Javascript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
可以實現(xiàn)web頁面的人機(jī)交互。
事件冒泡 :當(dāng)一個元素接收到事件的時候 會把他接收到的事件傳給自己的父級,一直到window 。(注意這里傳遞的僅僅是事件 并不傳遞所綁定的事件函數(shù)。所以如果父級沒有綁定事件函數(shù),就算傳遞了事件 也不會有什么表現(xiàn) 但事件確實傳遞了。)
IE的事件流叫做事件冒泡。顧名思義當(dāng)事件發(fā)生后,事件就開始從里向外傳播,查看下方代碼:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="myDiv"></div>
</body>
</html>
如果點擊頁面中的 <div> 元素,那么這個 chick 事件就會按照如下順序傳播:
click 事件 在 直系DOM 樹的每一級節(jié)點都會發(fā)生(自下而上),直到 document 對象。
那什么叫事件委托呢?它還有一個名字叫事件代理,JavaScript高級程序設(shè)計上講:事件委托就是利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。那這是什么意思呢?網(wǎng)上的各位大牛們講事件委托基本上都用了同一個例子,就是取快遞來解釋這個現(xiàn)象,我仔細(xì)揣摩了一下,這個例子還真是恰當(dāng),我就不去想別的例子來解釋了,借花獻(xiàn)佛,我摘過來,大家認(rèn)真領(lǐng)會一下事件委托到底是一個什么原理:
有三個同事預(yù)計會在周一收到快遞。為簽收快遞,有兩種辦法:一是三個人在公司門口等快遞;二是委托給前臺MM代為簽收?,F(xiàn)實當(dāng)中,我們大都采用委托的方案(公司也不會容忍那么多員工站在門口就為了等快遞)。前臺MM收到快遞后,她會判斷收件人是誰,然后按照收件人的要求簽收,甚至代為付款。這種方案還有一個優(yōu)勢,那就是即使公司里來了新員工(不管多少),前臺MM也會在收到寄給新員工的快遞后核實并代為簽收。
這里其實還有2層意思的:
第一,現(xiàn)在委托前臺的同事是可以代為簽收的,即程序中的現(xiàn)有的dom節(jié)點是有事件的;
第二,新員工也是可以被前臺MM代為簽收的,即程序中新添加的dom節(jié)點也是有事件的。
事件委托利用了事件冒泡,只指定一個父類事件處理程序,就可以管理某一類型的所有子類元素事件。
<ul id="myList">
<li id="goSth"></li>
<li id="doSth"></li>
<li id="sayHi"></li>
</ul>
專門建立的學(xué)習(xí)Q-q-u-n ⑦⑧④-⑦⑧③-零①② 分享學(xué)習(xí)方法和需要注意的小細(xì)節(jié),不停更新最新的教程和學(xué)習(xí)技巧(從零基礎(chǔ)開始到前端項目實戰(zhàn)教程,學(xué)習(xí)工具,全棧開發(fā)學(xué)習(xí)路線以及規(guī)劃)
三個<li> 被單擊,按照傳統(tǒng)方式,會給他們單獨添加事件:
document.getElementById('sayHi').onClick(function(){...})
點擊事件不多的情況下還好,若是所有元素都采用這樣的方式,結(jié)果就會有數(shù)不清的代碼用于添加事件處理。就好比一萬個人全擠到公司前臺去拿快遞,那場面,蔚為壯觀啊!但是把快遞放到前臺,前臺接收,然后分批次派送,就會舒服很多:
document.getElementById('myList').onClick(function(ev){
var e = ev || window.event;
var target = e.target;
switch (target.id) {
case 'goSth':
...
break;
case 'doSth':
...
break;
...
}
})
上面是用事件委托的方式,子元素是帶有事件效果的,我們可以發(fā)現(xiàn),當(dāng)用事件委托的時候,根本就不需要去遍歷元素的子節(jié)點,只需要給父級元素添加事件就好了,子元素點擊,會通過以事件冒泡的方式激活父元素已添加的相同事件,減少了很多 js 對于 dom 的事件操作,占用更少的內(nèi)存,這大概是事件委托的精髓所在。
所有用到按鈕的事件(多數(shù)鼠標(biāo)和鍵盤事件)都適合采用事件委托。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。