JS變量,做用域
屢次:保存數據的容器
變量名:$_字母,數字,數字不能開頭
關鍵字:if for
保留字:class
基本類型的值是不可修改的,引用類型是能夠修改的
基本類型不是修改,而是覆蓋
沒有辦法給基本類型添加屬性
當基本類型調用方法的時候,會去找它的包裝對象web
內存:
棧:有序排列的,分紅每一個小房間,沒有辦法擴建
堆:至關於小別墅,大小是不固定的,能夠本身擴建一些東西
棧內存是固定大小的空間,堆內存是空間不固定的,無序的
基本類型:不能夠修改:保存在棧內存中
引用類型:能夠修改,保存在堆內存中,地址保存在棧內存中,可是數據保存在堆內存中算法
1、基本數據類型:
byte:Java中最小的數據類型,在內存中佔8位(bit),即1個字節,取值範圍-128~127,默認值0
short:短整型,在內存中佔16位,即2個字節,取值範圍-32768~32767,默認值0
int:整型,用於存儲整數,在內在中佔32位,即4個字節,取值範圍-2147483648~2147483647,默認值0
long:長整型,在內存中佔64位,即8個字節-263~263-1,默認值0L
float:浮點型,在內存中佔32位,即4個字節,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0
double:雙精度浮點型,用於存儲帶有小數點的數字,在內存中佔64位,即8個字節,默認值0
char:字符型,用於存儲單個字符,佔16位,即2個字節,取值範圍0~65535,默認值爲空
boolean:布爾類型,佔1個字節,用於判斷真或假(僅有兩個值,即true、false),默認值false
2、引用數據類型:
類、接口類型、數組類型、枚舉類型、註解類型。數組
變量相等的比較:
1.基本類型和本類型比較直接==就行了
2.當比較引用類型的時候,比較的是他們的地址
引用類型,只有指向同一個引用才相等瀏覽器
或者使用遍歷/循環函數
複製變量的值:
基本類型的值的複製,兩個值互不干涉
可是引用類型的話因爲是使用地址,因此一個改變另一個也改變code
參數傳遞和類型檢測:
參數傳遞,調用的時候傳進去的參數叫實參
本身在裏面寫的叫形參
對於參數只有按值傳遞對象
檢測:
‘string’
true
undefined
null
[]
{}
function
RegExp
typeof返回類型接口
instanceof:前面的是後面的實例
只能和引用類型連用,不能夠和基本類型生命週期
全局做用域和局部做用域
變量的做用域:
就是變量起做用的區域和範圍
變量在哪一個範圍起做用
1.變量的生命週期
全局變量:全部都走完
函數做用域:只有函數執行時
2.訪問到變量
局部做用域主要指函數做用域內存
var name = ‘Xm’; function fn(argument){ var sex=‘male’; }
name:全局做用域,他在全局均可以訪問到
sex:局部做用域
js中沒有塊級做用域
變量對象:
var name=‘xm’; function fn(argument){ var sex =‘male’; function fn2(argument){ var age=18; } }
fn自己是在全局做用域中
可是fn內部是它的局部做用域
name=window.name fn=window.fn
不存在的屬性不會報錯,只不過會告訴你undefined
做用域鏈
var name=‘xm’; function fn(){ var name =‘xh’; var sex=‘male’; function fn2(){ var name=‘xhei’; var age=18; } }
使用做用域鏈從內到外查找
內層速度優於外層速度
查找變量的方法
延長做用域鏈
with(person){ …修改內容 }
至關於直接修改了person中的內容,至關於person.什麼什麼
js解析機制:
預解析
1.var變量:undefined
參數看成局步變量
2.函數
3.變量變量同名無所謂
函數變量:函數
函數函數:第二個函數
4.代碼塊有的不解析
在當前做用域下,js在運行以前都會去進行預解析,預解析會把帶有var 和 function 的關鍵字聲明,並在內存中安排好,進行預解析,而後再逐行讀取代碼(注意預解析只會發生在var 定義的變量和function上)。
逐行解析代碼
變量和函數衝突
按照函數走
函數函數衝突,按照後面的走
//examp5 var a=1 function fn(){ console.log(a) a=2 } fn() console.log(a)
/**
*/
————————————————
// examp6 var a=1 function fn(a){ console.log(a) a=2 } fn() console.log(a)
/**
*/
————————————————
// examp7 var a=1 function fn(a){ console.log(a) a=2 } fn(a) console.log(a)
/**
*/
————————————————
垃圾收集機制
1.離開做用域的值將被記錄爲可回收,將在垃圾收集期間刪除
2.標記清除是目前最主流的垃圾收集算法
3.標記清除就是給不用的值加標記,而後回收其內存
4.引用計數算法可能由於循環引用的的問題而得不到釋放
5.當變量不用的時候,能夠手動接觸
釋放無用的數據,會瘦內存
自動
手動(原理:找出沒用的數據,打上標記,釋放其內存,週期性執行)
標示無用數據的策略:
標記清除:
環境中的變量
引用計數:
跟蹤記錄每一個數據的引用次數,。 好比Netscape 問題:循環引用
IE
JS: DOM
BOM
內存管理
內存管理:web瀏覽器<桌面應用程序
null:解除引用
局部變量離開做用域,自動的解除引用
var arr=[…]:好比這個全局變量一直存在,咱們能夠手動結局它,用=null