世界不止0和1 還有...

目錄
基礎知識
1.起步入門
運行流程
腳本定義
避免延遲
代碼注釋
自動分號
2.變數宣告
命名規則
變數宣告
弱型別
提升
3.塊作用域
共同點
var
let
const
重復定義
Object.freeze
傳值與傳址
4.undefined
null
基礎知識
1.起步入門
運行流程
JS請求處理步驟如下:

腳本定義
內嵌腳本
像style標簽一樣,可以在html檔案中使用script標簽嵌入javascript代碼,
外部檔案
通過設定 src 屬性引入外部js檔案,

引入外部檔案在標簽體內的腳本不會執行,下面的alert彈窗不會執行,

避免延遲
如果js放在 <heade> 標簽中要等到js加載并決議后才會顯示<body>標簽中的內容,
延遲體驗
下面是延遲加載的示例

Lamour.js 內容如下

h1會在Lamour.js檔案加載并決議后才會顯示,
推薦做法
為了解決上面的問題,可以將js放在 標簽前如下所示

代碼注釋
和大部分語言使用的注釋方式相仿,有單行和多行注釋,
單行注釋

多行注釋

自動分號
使用分號表示一段指令的結束,當沒有輸入分號時如果有換行符JS會自動添加分號,減少錯誤的發生,
- 但推薦每個指令都以分號結束
- 在使用構建工具時,不使用分號結束可能會造成例外

2.變數宣告
命名規則
JS中的變數是弱型別可以保存所有型別的資料,即變數沒有型別而值有型別,變數名以字母、$、_ 開始,后跟字母、數字、_,
下面都是合法的命名

JS語言關鍵字不能用來做變數名,比如 true、if、while、class 等,
變數宣告
可以使用多種方式定義變數比如var、let等

以上代碼是宣告和賦值的結合

使用, 可以同時宣告多個變數

弱型別
在JS中變數型別由所參考的值決定

變數提升
決議器會先決議代碼,然后把宣告的變數的宣告提升到最前,這就叫做變數提升,下面代碼在決議程序中發現while不能做為變數名,沒有到執行環節就出錯了,這是一個很好的決議程序的體驗,

使用 var 宣告代碼會被提升到前面

下面是 if(false) 中定義的var也會發生變數提升,注釋掉if 結果會不同

使用 var 定義的代碼,宣告會被提升到前面,賦值還在原位置

3.塊作用域
共同點
var/let/const共同點是全域作用域中定義的變數,可以在函式中使用

函式中宣告的變數,只能在函式及其子函式中使用

函式中宣告的變數就像宣告了私有領地,外部無法訪問

var
使用 var 宣告的變數存在于最近的函式或全域作用域中,沒有塊級作用域的機制,
沒有塊作用域很容易污染全域,下面函式中的變數污染了全域環境

沒有塊作用作用域時var也會污染全域

使用let有塊作用域時則不會

下例中體驗到 var 沒有塊作用域概念, do/while 定義的變數可以在塊外部訪問到

var 全域宣告的變數也存在于 window物件中

以往沒有塊任用時使用立即執行函式模擬塊作用域

有了塊作用域后實作就變得簡單多了

let
與 var 宣告的區別是 let/const 擁有塊作用域,下面代碼演示了塊外部是無法訪問到let宣告的變數,
- 建議將
let在代碼塊前宣告 - 用逗號分隔定義多個
let存在塊作用域特性,變數只在塊域中有效

塊內部是可以訪問到上層作用域的變量

每一層都是獨立作用域,里層作用域可以宣告外層作用域同名變數但不會改變外層變數
const
使用 const 用來宣告常量,這與其他語言差別不大,比如可以用來宣告后臺介面的URI地址,
- 常量名建議全部大寫
- 只能宣告一次變數
- 宣告時必須同時賦值
- 不允許再次全新賦值
- 可以修改參考型別變數的值
- 擁有塊、函式、全域作用域
常量不允許全新賦值舉例

改變常量的參考型別值

下面演示了在不同作用域中可以重名定義常量
重復定義
使用 var 可能造成不小心定義了同名變數

使用let 可以避免上面的問題,因為let宣告后的變數不允許在同一作用域中重新宣告

不同作用域也不可以重新宣告

但可以改變值這是與const不同點

let 全域宣告的變數不存在于 window物件中,這與var宣告不同
Object.freeze
如果凍結變數后,變數也不可以修改了,使用嚴格模式會報出錯誤,

傳值與傳址
基本資料型別指數值、字串等簡單資料型別,參考型別指物件資料型別,
基本型別復制是值的復制,互相不受影響,下例中將a變數的值賦值給b變數后,因為基本型別變數是獨立的所以a的改變不會影響b變數的值,

對于參考型別來講,變數保存的是參考物件的指標,變數間賦值時其實賦值是變數的指標,這樣多個變數就參考的是同一個物件,

4.undefined
對宣告但未賦值的變數回傳型別為 undefined 表示值未定義,

對未宣告的變數使用會報錯,但判斷型別將顯示 undefined,
我們發現未賦值與未定義的變數值都為 undefined ,建議宣告變數設定初始值,這樣就可以區分出變數狀態了,
函式引數或無回傳值是為undefined

null
null 用于定義一個空物件,即如果變數要用來保存參考型別,可以在初始化時將其設定為null

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/289308.html
標籤:其他
上一篇:Javascript函式學習
下一篇:SpringMVC中使用JSON
