title: JS 的學習理解--->變數 grammar_cjkRuby: true
---------- 變數
程式:當一個專案執行起來後,就是一個程式 工廠
程式是作業系統分配和除錯資源(cpu和記憶體)的基本單位
執行緒:真正完成操作的是執行緒 JS是單執行緒的,預設情況下js從上到下執行操作
js的執行緒也叫做主執行緒,當執行緒遇到耗時任務時,它就找別的執行緒來幫忙。別的執行緒把活幹完後,需要把結果給主執行緒。

開發軟體是用來處理資料的,資料儲存在記憶體中(小格子)
每個小格子都有一個地址,可根據該地址找到這個小格子
給每個小格子取一個別名就叫做變數名
變數 = 變數名+變數值
宣告變數:var let
var宣告:var a; 缺陷(重複宣告,遺漏宣告,提升)
let宣告:與var相似,用來定義變數
特點:
1.let宣告的變數只在let所在的程式碼塊內有效


4.暫存性死區(TDZ)在程式碼塊內,使用let命令宣告變數之前,該變數都是不可用的。



3.沒有提升
4.宣告時必須賦值 eg: const PI(錯誤) const PI = 3.14(==正確==)
5.是變數在棧區的值不能改動,儲存的資料在堆區的資訊是可以改動的



分界點:函式 宣告變數使用var,let 宣告函式用function
全域性變數在函式內外都可以訪問
區域性變數只能在函式內部訪問,在函式外不能訪問
資料型別
針對兩種不同的資料,分配不同的記憶體空間----->為了合理利用空間 兩類:
基本資料型別:
number,string,boolean,undefined,null
引用資料型別:
object(array,function)
-------
JS程式碼的解析與執行:
1,程式碼塊可以有多個,上面的程式碼塊不能使用下面的程式碼塊中的資料,下面程式碼塊可以使用上面程式碼塊中的資料。
2,預編譯,在Js程式碼真正執行這前有一個預編譯的過程
提升:
提升變數: 提升程式碼塊的最前面
提升函式:
執行:
3,變數提升
var變數可以提升,沒有var的變數是不會提升的
迴圈變數也可以提升
函式內部加var的變數也會提升,提升到了函式內部的最前面
4,提升函式
函式宣告也會提升,提升到程式碼塊的最前面
函式表示式不會提升,原因函式表示式本質是一個變數值
資料的儲存
兩類:
基本資料型別:棧區(nubmer,string,boolean,undefiend,null)
引用資料型別:堆區 object(array,function)