日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

个人JS体系整理(二)

發(fā)布時間:2025/3/16 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人JS体系整理(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.?eval

  eval()函數(shù)計(jì)算JavaScript字符串,并把它作為腳本代碼來執(zhí)行。如果參數(shù)是一個表達(dá)式,eval()函數(shù)將執(zhí)行表達(dá)式。如果參數(shù)是Javascript語句,eval()將執(zhí)行Javascript語句。

1.1

  如上圖所示,第一個eval內(nèi)部為一個函數(shù)表達(dá)式,在執(zhí)行該函數(shù)的同時,定義了兩個全局變量XY,所以結(jié)果分別為200427

  由于因?yàn)樗鼤?zhí)行任意傳給它的代碼,在代碼字符串未知或者是來自一個不信任的源時,會導(dǎo)致安全問題,同時非常耗性能(它會執(zhí)行兩次2次,一次解析成js語句,一次執(zhí)行),最重要的是,99.9%使用eval 的場景都有不使用eval的解決方案,所以在任何情況下我們都應(yīng)該避免使用eval函數(shù)。

二.?nullundefined 的區(qū)別

  (1)?null表示一個對象是“沒有值”的值,也就是值為“空”;undefined表示一個變量聲明了沒有初始化(即沒有賦值)

  (2)?undefined不是一個有效的JSON,而null是;undefined的類型(typeof)undefined,而null的類型(typeof)object

  (3)?在驗(yàn)證null時,一定要使用“===” ,因?yàn)椤?/span>==”無法分別nullundefined!

圖2.1

三.?事件與事件流

  (1)?事件

  事件是文檔或者瀏覽器窗口中發(fā)生的,特定的交互瞬間,也可以理解為是用戶或?yàn)g覽器自身執(zhí)行的某種動作,如click,changehover都是事件的名字,同時事件是javaScriptDOM之間交互的橋梁。

  (2)?事件流

  事件發(fā)生時會在元素節(jié)點(diǎn)與根節(jié)點(diǎn)之間按照特定的順序傳播,路徑所經(jīng)過的所有節(jié)點(diǎn)都會收到該事件,這個傳播過程即DOM事件流。事件流有兩種模型,即捕獲型事件流和冒泡型事件流。

  冒泡型事件流:事件的傳播是從最特定的事件目標(biāo)到最不特定的事件目標(biāo)。即從DOM樹的葉子到根。

  捕獲型事件流:事件的傳播是從最不特定的事件目標(biāo)到最特定的事件目標(biāo)。即從DOM樹的根到葉子。

3.1

  如上圖所示,DOM標(biāo)準(zhǔn)采用捕獲+冒泡,兩種事件流都會觸發(fā)DOM的所有對象,從document對象開始,也在document對象結(jié)束。DOM標(biāo)準(zhǔn)規(guī)定事件流包括三個階段:事件捕獲階段、處于目標(biāo)階段和事件冒泡階段。

  (1)?事件捕獲階段:實(shí)際目標(biāo)(<div>)在捕獲階段不會接收事件。也就是在捕獲階段,事件從document到<html>再到<body>就停止了。

  (2)?處于目標(biāo)階段:事件在<div>上發(fā)生并處理。但是事件處理會被看成是冒泡階段的一部分。

  (3)?冒泡階段:事件又傳播回文檔。

  來個例子搞一下,如下圖:

3.2

  上圖點(diǎn)擊btn1的區(qū)域,會先彈出“btn1”,緊跟著彈出“content”,這就是一個最典型的冒泡事件。

3.3

  上圖代碼運(yùn)行結(jié)果為:先彈出“btn1”,然后彈出“btn2”,最后彈出“content ”。它與前一個代碼的區(qū)別是,一個是綁定,一個是注冊。即DOM元素只能綁定一個事件,類似變量,后面的會把前面的覆蓋掉;但是DOM元素可以注冊多個事件,即在注冊第一個事件的時候,同時注冊了第二個事件,所以在執(zhí)行的時候,會從第二個(也就是當(dāng)前元素的最后一個注冊事件)開始執(zhí)行,直到執(zhí)行完第三個事件。

四.?閉包

  閉包,官方對閉包的解釋是:一個擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù))因而,這些變量也是該表達(dá)式的一部分。閉包的特點(diǎn)如下:

  • 作為一個函數(shù)變量的一個引用,當(dāng)函數(shù)返回時,其處于激活狀態(tài)。
  •   2. 一個閉包就是當(dāng)一個函數(shù)返回時,一個沒有釋放資源的棧區(qū)。
  •   簡單的說,Javascript允許使用內(nèi)部函數(shù)即函數(shù)定義和函數(shù)表達(dá)式位于另一個函數(shù)的函數(shù)體內(nèi)。而且,這些內(nèi)部函數(shù)可以訪問它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時,就會形成閉包。

    圖4.1

      如上圖所示,給函數(shù)原型增加一個方法,同時創(chuàng)建一個實(shí)例,會得到結(jié)果3.14159

    ??4.2

      上圖就是把一個函數(shù)return為一個變量,那么當(dāng)創(chuàng)建該函數(shù)的實(shí)例的時候,所有該變量具有的方法都可以被調(diào)用,同時還是在函數(shù)作用域之外被調(diào)用,即閉包,結(jié)果依舊為3.14159

    圖4.3

    這屬于最容易理解的方式,即直接new一個對象,給它賦予各種屬性和方法,最終結(jié)果依舊為3.14159

    4.4

      這種方式是使用最多的一種方式,也是最方便的一種方式。(var obj = {}就是聲明一個空的對象。

      閉包的用途如下:

  • 函數(shù)只需要執(zhí)行一次,其內(nèi)部變量無需維護(hù),比如UI的初始化
  • 前端緩存。假設(shè)有一個很耗性能和時間的函數(shù)對象,每次調(diào)用都需要很久的時間,那么我們就需要將計(jì)算出來的值存儲起來,當(dāng)調(diào)用這個函數(shù)的時候,首先在緩存中查找,如果找不到,則進(jìn)行計(jì)算,然后更新緩存并返回值,如果找到了,直接返回查找到的值即可。閉包正是可以做到這一點(diǎn),因?yàn)樗粫尫磐獠康囊?#xff0c;從而函數(shù)內(nèi)部的值可以得以保留。
  • 封裝函數(shù)(組件化)
  • 實(shí)現(xiàn)類和繼承(參考第一種寫法)
  • 五.?callapply

  • 共同點(diǎn)
  •   都可以用來代替另一個對象調(diào)用一個方法,將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?/span>thisObj指定的新對象

  • 不同點(diǎn)
  •   applyapply(thisObj[argArray])最多只能有兩個參數(shù)——this對象和一個數(shù)組argArray。如果給該方法傳遞多個參數(shù),則把參數(shù)都寫進(jìn)這個數(shù)組里面,當(dāng)然,即使只有一個參數(shù),也要寫進(jìn)數(shù)組里。如果argArray不是一個有效的數(shù)組或arguments對象,那么將導(dǎo)致一個TypeError。如果沒有提供argArraythisObj任何一個參數(shù),那么Global對象將被用作thisObj,并且無法被傳遞任何參數(shù)。

      callcall(thisObjObject)它可以接受多個參數(shù),第一個參數(shù)與apply一樣,后面則是一串參數(shù)列表。這個方法主要用在js對象各方法相互調(diào)用的時候,使當(dāng)前this實(shí)例指針保持一致,或者在特殊情況下需要改變this指針。如果沒有提供thisObj參數(shù),那么 Global 對象被用作thisObj

    5.1

      如上圖所示,無論是apply還是call,它的結(jié)果都是一樣的,都是調(diào)用的前面的函數(shù)的方法,但是傳的參數(shù)是不一樣的,當(dāng)然這只是在參數(shù)方面的不同。

    5.2

      如上,就是利用callapply實(shí)現(xiàn)繼承,通過給函數(shù)賦予屬性和方法,然后給另一個函數(shù)繼承原函數(shù),再創(chuàng)建新函數(shù)的實(shí)例,就實(shí)現(xiàn)了最簡單的繼承。

      圖5.3

      如上圖所示,即一種多重繼承的實(shí)現(xiàn)方式。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/andyzjy/p/10477879.html

    總結(jié)

    以上是生活随笔為你收集整理的个人JS体系整理(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久久久久日产精品 | 国产精品天天狠天天看 | 韩国成人免费视频 | 国产激情自拍 | 国产男女无套 | a级成人毛片 | 午夜免费一级片 | 国产一区中文字幕 | 午夜一区在线 | 国产一级免费看 | 久久久久久久人妻无码中文字幕爆 | 91尤物视频在线观看 | 锕锕锕锕锕锕锕锕 | 美女网站免费视频 | 一级爱爱免费视频 | 人人入人人 | 全黄一级男人和女人 | 精品国产不卡 | 国产内射老熟女aaaa∵ | www污污| 国产精品无码粉嫩小泬 | 一区二区三区在线播放视频 | 一级少妇毛片 | 欧美成人一区二区 | 国产五月婷婷 | 在线色亚洲 | 亚洲精品aaaa | 尤物视频免费在线观看 | 久久男人网 | 影音先锋成人资源网 | 日韩人妻一区二区三区蜜桃视频 | 91爱爱com| 解开乳罩喂领导吃奶 | 无码av天堂一区二区三区 | 欧美乱妇在线观看 | 欧美亚洲精品在线 | 日韩国产精品一区二区三区 | 亚洲一二三四五 | 侵犯亲女在线播放视频 | 亚洲国产成人av | 2019天天干天天操 | 麻豆成人免费视频 | 欧美性极品少妇xxxx | 在线观看免费av网站 | 亚洲av无码精品色午夜果冻不卡 | 国产第一网站 | 黄色靠逼视频 | 综合久久91| 麻豆久久久久久久久久 | 国产ts变态重口人妖hd | 国产尤物视频在线观看 | 色视频国产 | 国产999精品| 午夜精品国产精品大乳美女 | 中文字幕av网 | 亚洲四虎影院 | 日本乱偷中文字幕 | 亚洲欧美日本在线观看 | 国产美女视频免费观看下载软件 | 日韩精品久久久久 | ass亚洲尤物裸体pics | 秋霞成人午夜伦在线观看 | 久久精品国产99精品国产亚洲性色 | 少女忠诚电影高清免费 | 中文字幕乱码在线人视频 | 丝袜诱惑一区 | 亚洲久草 | а√中文在线资源库 | 天天综合网天天综合 | 以女性视角写的高h爽文 | 久久久久精彩视频 | 污片网站在线观看 | 激情五月色综合国产精品 | 三级精品视频 | 精品人妻码一区二区三区红楼视频 | 黄色网页入口 | 一级高清毛片 | 国产a一级片 | 免费成人福利视频 | 久热青草 | 亚洲精品理论片 | 精品三级 | 国产精品亚洲五月天丁香 | 亚洲一区二区三区免费 | 无码精品在线观看 | 老司机性视频 | 国产又粗又猛又爽又黄的视频小说 | 亚洲国产av一区二区 | 麻豆视频免费看 | 毛片无限看 | 久草国产在线 | a一级黄色| 国产成人精品无码高潮 | 日美女逼逼 | 日本一区二区视频在线 | 日韩亚洲欧美一区二区三区 | 日韩精品一区二区三区在线播放 | 男人天堂网在线视频 | 流白浆视频|