預解析:
會預先解析一些(變量定義、函數會預解析);
var a=12;
只把var a提到作用域的頂部
js會把變量的聲明(僅僅是聲明)提到頂部。不會突破作用域
執行步驟:,
讀取一個script標簽>預解析>執行里面的代碼>
讀取下一個script標簽>預解析>執行里面的代碼
不會突破script標簽
undefined和not defined
undefined存在沒有賦值
not defined 沒定義 直接用
預解析作用范圍:
會找本作用域之內(函數、script)
函數也有預解析,但是要注意:
當以變量的形式聲明的函數,預解析會按照變量的特性走
引用:
對象才有引用 基本類型沒有
什么叫有引用 ?他們指的是同一個東西;
引用: 共同是一個東西:object
只有在對象身上才會發生
為什么會它有引用 因為對象比較大 不能每次都用新東西 性能浪費
數組的真正寫法:
new Array();
函數的真正寫法:
new Function(); //不推薦
異常:
try...catch
報錯的時候,后面的程序不執行。
bug異常 程序員不可控制的錯誤
try...catch
try 嘗試著去執行一段代碼。
如果沒有做錯。就正常執行。
如果有錯,找catch
try{
可能會出錯的代碼
}catch(e){
補救代碼
}
e 包含著錯誤信息
JS中所有全局都是window的
window的作用:在封閉空間中聲明一個全局的變量
全局變量和函數都屬于window
嚴格模式
'use strict'
嚴格模式的好處:
1.解決了局部函數中this是window的bug.
2.解決了不加var聲明變量的bug.
3.避免在if,switch,for,while,for in里面定義函數
(不允許在非函數的代碼塊內聲明函數)
4.去掉了with