Javascript 進階

一. 變量提升

看以下代碼, 或多或少會有些問題的.

function fn(){
    console.log(name);
    var name = '大馬猴';
}
fn()

發(fā)現(xiàn)問題了么. 這么寫代碼, 在其他語言里. 絕對是不允許的. 但是在js里. 不但允許, 還能執(zhí)行. 為什么呢? 因為在js執(zhí)行的時候. 它會首先檢測你的代碼. 發(fā)現(xiàn)在代碼中會有name使用. OK. 運行時就會變成這樣的邏輯:

function fn(){
    var name;
    console.log(name);
    name = '大馬猴';
}
fn()

看到了么. 實際運行的時候和我們寫代碼的順序可能會不一樣....這種把變量提前到代碼塊第一部分運行的邏輯被稱為變量提升. 這在其他語言里是絕對沒有的. 并且也不是什么好事情. 正常的邏輯不應(yīng)該是這樣的. 那么怎么辦? 在新的ES6中. 就明確了, 這樣使用變量是不完善的. es6提出. 用let來聲明變量. 就不會出現(xiàn)該問題了.

function fn(){
    console.log(name);  // 直接報錯, let變量不可以變量提升.
    let name = '大馬猴'; 
}
fn()

==結(jié)論一, 用let聲明變量是新版本javascript提倡的一種聲明變量的方案.==

let還有哪些作用呢?

function fn(){
    // console.log(name);  // 直接報錯, let變量不可以變量提升.
    // let name = '大馬猴';
    var name = "周杰倫";
    var name = "王力宏";
    console.log(name);
}
fn()

顯然一個變量被聲明了兩次. 這樣也是不合理的. var本意是聲明變量. 同一個東西. 被聲明兩次. 所以ES6規(guī)定. let聲明的變量. 在同一個作用域內(nèi). 只能聲明一次.

function fn(){
    // console.log(name);  // 直接報錯, let變量不可以變量提升.
    // let name = '大馬猴';
    let name = "周杰倫";
    console.log(name);
    let name = "王力宏";
    console.log(name);
}
fn()

注意, 報錯是發(fā)生在代碼檢查階段. 所以. 上述代碼根本就執(zhí)行不了.

==結(jié)論二, 在同一個作用域內(nèi). let聲明的變量只能聲明一次. 其他使用上和var沒有差別==

二. 閉包函數(shù)(難)

2.1 定時器

setTimeout(函數(shù)名, 時間(毫秒),表示多長時間后運行此函數(shù)荸实,注意:函數(shù)名不要帶括號僚稿。

function fn(){
    console.log('測試定時器')
}
setTimeout(fn, 5000)

常見的用法

setTimeout(function (){
    console.log('我是一個匿名函數(shù)')
}, 3000)

setInterval 每隔多長時間運行一次灰粮,會一直運行立砸;使用場景:每隔多長時間重新設(shè)置一下cookie

setInterval(function (){
    console.log('每隔一秒鐘運行一次')
}, 1000)

在瀏覽器的控制臺上可以輸入window.clearInterval(s)索赏,讓setInterval 代碼停止運行

let s= setInterval(function (){
    console.log('每隔一秒鐘運行一次')
}, 1000)

window.clearInterval(s)

2.2 時間

先擴展一個軟件測試時的問題:
有時候久窟,前端發(fā)布版本了尉尾,但是在瀏覽器上看到頁面沒有更新(還是舊版本的內(nèi)容介蛉,而不是新版本的)萌庆,但是前端的開發(fā)經(jīng)過檢查后,堅定是版本已經(jīng)發(fā)布了币旧。既然前端已經(jīng)發(fā)布了新版本践险,那么頁面的內(nèi)容應(yīng)該是新的才對,而為什么頁面內(nèi)容還是舊的呢?原因在于:瀏覽器對同一個URL訪問的時候巍虫,會進行緩存彭则,因為前不久訪問了這個url,離現(xiàn)在返回的時間不長占遥,瀏覽器對前面的內(nèi)容進行緩存了俯抖,直接展示出來,而沒有去獲取最新的資源瓦胎。
為了解決這個問題芬萍,可以在url后面添加一些變化的參數(shù)來確保每次訪問的url是不一樣的,這樣瀏覽器就不會緩存了搔啊,問題來了担忧,這個是要根據(jù)網(wǎng)頁內(nèi)容的需求來做的,比如一些業(yè)務(wù)要實時更新內(nèi)容坯癣,如:訂單頁面瓶盛,購物車頁面等等。對于一些不是那么經(jīng)常要更新內(nèi)容的頁面示罗,即不需要多添加這些變化的參數(shù)惩猫,一是這樣可以減少服務(wù)器訪問的壓力,二是可以減少服務(wù)器的流量費蚜点,三是可以提高用戶體驗(快速獲取頁面內(nèi)容)減少加載時間轧房。
而這些變化的參數(shù)可以使用隨機數(shù)來實現(xiàn),而是可以使用時間戳參數(shù)绍绘。

JS中時間的運用

// 這里直接在JS文件中運行奶镶,打印出來的時間少了八小時。(通過getTime()獲取到的時間戳是對的)時區(qū)是0時區(qū)陪拘,要獲取中國的時間厂镇,要加8小時,但是在HTML中運行時間是對的左刽,問題還沒找到捺信,后續(xù)查詢一下

function time(){
    let t = new Date()

    console.log(t)

    let yea = t.getYear()   // 這個方法要加1900,輸出是122欠痴,加1900=2022(老網(wǎng)站)
    // console.log(yea)

    let year = t.getFullYear()
    // console.log('年份',year)

    let month = t.getMonth() + 1
    // console.log('月份', month)    //需要加1迄靠,才是當(dāng)前月份

    let date = t.getDate()
    // console.log('日', date)

    let hour = t.getHours()
    // console.log(hour)

    let minute = t.getMinutes()
    // console.log(minute)
    let seconds = t.getSeconds()
    // console.log(seconds)

    format_date = year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + seconds;
    console.log(format_date)
    }
setInterval(time, 1000)

要注意
1、在逆向的時候喇辽,如果看到一個東西 + 1900先要想到這個是一個時間掌挚;
2、獲取時間的時候菩咨,可以不加小括號let d=new Date

JS中的時間戳

單位是:毫秒吠式,13位數(shù)字

// 獲取時間戳
let d=new Date();
console.log(d.getTime())
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舅世,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奇徒,更是在濱河造成了極大的恐慌雏亚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摩钙,死亡現(xiàn)場離奇詭異罢低,居然都是意外死亡,警方通過查閱死者的電腦和手機胖笛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門网持,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人长踊,你說我怎么就攤上這事功舀。” “怎么了身弊?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵辟汰,是天一觀的道長。 經(jīng)常有香客問我阱佛,道長帖汞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任凑术,我火速辦了婚禮翩蘸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淮逊。我一直安慰自己催首,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布泄鹏。 她就那樣靜靜地躺著郎任,像睡著了一般。 火紅的嫁衣襯著肌膚如雪命满。 梳的紋絲不亂的頭發(fā)上涝滴,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音胶台,去河邊找鬼。 笑死杂抽,一個胖子當(dāng)著我的面吹牛诈唬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缩麸,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铸磅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阅仔,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吹散,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后八酒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空民,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年羞迷,在試婚紗的時候發(fā)現(xiàn)自己被綠了界轩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡衔瓮,死狀恐怖浊猾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情热鞍,我是刑警寧澤葫慎,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站薇宠,受9級特大地震影響幅疼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昼接,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一爽篷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慢睡,春花似錦逐工、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至髓涯,卻和暖如春袒啼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纬纪。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工蚓再, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人包各。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓摘仅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親问畅。 傳聞我的和親對象是個殘疾皇子娃属,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容