摘要:如何學(xué)習(xí)的學(xué)習(xí)順序以此類推沒學(xué)好就別想學(xué)好邊學(xué)邊用學(xué)了就要用變量聲明的方式上面兩個(gè)是的語法,下面兩個(gè)是的語法塊級作用域看會(huì)聲明一個(gè)全局變量嗎顯然當(dāng)聲明了全局變量后,是無法再聲明全局變量的,只能對其賦值結(jié)論含義不明的問題下面的代碼不會(huì)執(zhí)
1.如何學(xué)習(xí)ES6 1.1 js的學(xué)習(xí)順序
ES5 -> ES6 -> ES7 -> ES8 以此類推
ES5沒學(xué)好就別想學(xué)好ES61.2 邊學(xué)邊用
學(xué)了就要用
2.變量聲明的方式a = 1 var a = 1 // 上面兩個(gè)是ES3的語法,下面兩個(gè)是ES6的語法 let a = 1 const a = 12.0 塊級作用域 {}
看mdn
2.1 a = 1 會(huì)聲明一個(gè)全局變量 嗎?var a function fn1() { var a fn2 function fn2() { a = 1 console.log(window.a) // undefined } } fn1()
顯然 當(dāng)var聲明了全局變量后,a = 1 是無法再聲明全局變量的,只能對其賦值
結(jié)論:a = 1 含義不明
function fn() { if (true) { console.log(a) // undefined } else { // 下面的代碼不會(huì)執(zhí)行 var a console.log(a) } } fn()
哪怕var沒有被執(zhí)行,變量也會(huì)被提升
也就是說 var聲明的變量沒有塊級作用域 , 而js程序員為了讓var有塊級作用域,通常使用的方式是立即執(zhí)行函數(shù)
所有的var建議寫在第一行 —— 《js語法精髓》2.3 let 2.3.1 let的由來
下面我我們來寫段代碼
目的是只暴露一個(gè)全局變量 blues
用var來寫
1.需要一個(gè)立即執(zhí)行函數(shù) 2.需要一個(gè)函數(shù)把a(bǔ)包起來
( function () { var a = 1 window.blues = function () { console.log(a) // 1 } } )()
用let來寫
{ let a = 1 window.blues = function () { console.log(a) // 1 } } blues() console.log(a) // a is not defined
let 的特點(diǎn)
let的作用域在最近的 {} 之間
let不能重復(fù)聲明【。。就算用var也不會(huì)有人重復(fù)聲明把^_^】
使用let聲明的變量在塊級作用域內(nèi)能強(qiáng)制執(zhí)行更新變量【看mdn最后一個(gè)for循環(huán)例子】
let的臨時(shí)死區(qū)【temp dead zone】—— 如果你在 let a 之前使用a,報(bào)錯(cuò)
{ let a = 1 { console.log(a) // a is not defined let a = 2 } } // 這培養(yǎng)了我們一個(gè)好習(xí)慣 —— 所有的變量聲明都要寫在前面
test
if (true) { let a = 1 } else { let a = 2 } console.log(a) // ??? // answer:a is not defined
簡單理解let —— let就看它在哪個(gè)花括號里
2.4 constconst和let一樣,只有一個(gè)區(qū)別 —— 只有一次賦值機(jī)會(huì),且必須在聲明的時(shí)候就賦值
const:英文意思 常量 —— 固定一個(gè)值
{ const a = 1 console.log(a) // 1 a = 2 console.log(a) // 報(bào)錯(cuò) —— Assignment to constant variable.[給常量賦值(是錯(cuò)的)] }
用const的情況
{ const PI = 3.1415926 }3.let的擴(kuò)展
用let解決for循環(huán)中onclick問題
HTML部分
JS部分
先看用var來寫
var liTags = document.querySelectorAll("li") for (var i = 0; i < liTags.length; i++) { // 使用立即執(zhí)行函數(shù),var j 就不會(huì)跑到外面去(不會(huì)被提升) (function () { var j = arguments[0] liTags[j].onclick = function () { console.log(j) } })(i) }
mdn的寫法
for (let i = 0; i < liTags.length; i++) { // 注意i的作用域就在上面的 () 里 // 不過for循環(huán)在使用let的時(shí)候自動(dòng)做了一個(gè)魔法 // let j = i // js自動(dòng)加的 // 過程是這樣的 // 下面這3行代碼執(zhí)行之前 —— 塊里面的i = ()里面的i liTags[i].onclick = function () { console.log(i) } // 上面3行代碼執(zhí)行后 —— ()里面的i = 塊里面的i }
如果我的解釋你看不懂的話,希望你能看懂下面的代碼
for (var _i = 0; _i < liTags.length; _i++) { let j = _i liTags[j].onclick = function () { console.log(j) } }4.永遠(yuǎn)別再用var了:)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107509.html
摘要:如何學(xué)習(xí)的學(xué)習(xí)順序以此類推沒學(xué)好就別想學(xué)好邊學(xué)邊用學(xué)了就要用變量聲明的方式上面兩個(gè)是的語法,下面兩個(gè)是的語法塊級作用域看會(huì)聲明一個(gè)全局變量嗎顯然當(dāng)聲明了全局變量后,是無法再聲明全局變量的,只能對其賦值結(jié)論含義不明的問題下面的代碼不會(huì)執(zhí) 1.如何學(xué)習(xí)ES6 1.1 js的學(xué)習(xí)順序 ES5 -> ES6 -> ES7 -> ES8 以此類推 ES5沒學(xué)好就別想學(xué)好ES6 1.2 邊學(xué)邊用 ...
摘要:模塊什么是模塊什么是模塊化玩過游戲的朋友應(yīng)該知道,一把裝配完整的步槍,一般是槍身消音器倍鏡握把槍托。更重要的是,其它大部分語言都支持模塊化。這一點(diǎn)與規(guī)范完全不同。模塊輸出的是值的緩存,不存在動(dòng)態(tài)更新。 1.模塊 1.1 什么是模塊?什么是模塊化? 玩過FPS游戲的朋友應(yīng)該知道,一把裝配完整的M4步槍,一般是槍身+消音器+倍鏡+握把+槍托。 如果把M4步槍看成是一個(gè)頁面的話,那么我們可以...
摘要:指北詳談解構(gòu)賦值附贈(zèng)練習(xí)題一何謂解構(gòu)賦值基本概念首先我們看一下給的定義解構(gòu)賦值語法是一個(gè)表達(dá)式,這使得可以將值從數(shù)組或?qū)傩詮膶ο筇崛〉讲煌淖兞恐袕亩x中,我們可以發(fā)現(xiàn)解構(gòu)賦值的作用是對變量進(jìn)行賦值主要通過兩個(gè)方面實(shí)現(xiàn)這個(gè)作用數(shù)組將數(shù)組中的 ES6指北【6】——詳談解構(gòu)賦值【附贈(zèng)練習(xí)題】 一、何謂解構(gòu)賦值? 1. 基本概念 首先我們看一下MDN給的定義 解構(gòu)賦值語法是一個(gè) Javasc...
摘要:參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。從上面的概念中,我們至少可以知道如下三個(gè)信息語法變量。 一、函數(shù)的默認(rèn)參數(shù)值 1. ES6之前,我們?nèi)绾螌?shí)現(xiàn)函數(shù)默認(rèn)參數(shù) 1.1 方式一:使用邏輯運(yùn)算符【||】 function test(x) { x = x || 默認(rèn)值 // 使用||設(shè)置默認(rèn)值 console.log(x) } test() // 默認(rèn)值 但這樣...
摘要:箭頭函數(shù)基本語法函數(shù)語法具名函數(shù)匿名函數(shù)三句話第一句話聲明第二句話聲明匿名函數(shù)第三句話把匿名函數(shù)賦值給箭頭函數(shù)語法特點(diǎn)只能做賦值,不能做聲明第一種寫法完全寫法不省略參數(shù)個(gè)數(shù),不省略函數(shù)體花括號參數(shù)個(gè)數(shù)函數(shù)體內(nèi)語句個(gè)數(shù)第二種寫法省略參數(shù)括號參 1.箭頭函數(shù)基本語法 1.1 ES3 函數(shù)語法 // 具名函數(shù) function xxx(arg1, arg2) { console.lo...
閱讀 1605·2021-09-23 11:31
閱讀 920·2021-09-23 11:22
閱讀 1337·2021-09-22 15:41
閱讀 4062·2021-09-03 10:28
閱讀 2907·2019-08-30 15:55
閱讀 3536·2019-08-30 15:55
閱讀 1942·2019-08-30 15:44
閱讀 2712·2019-08-30 13:50