一.變量es6
var function let const class import 定義變量的關鍵字異步
備註:不能忽略函數的形參 形參(函數的私有變量)函數
var 定義變量spa
var 變量提高,可是不能定義,給window添加一個對應的屬性3d
function對象
既能夠提早聲明,同時還定義了 定義(就是給這個變量賦值了)blog
let是es6提供的一種聲明變量的方式
1.沒有變量提高的功能,在聲明以前不能使用
2.不能重複聲明
3.不會給window添加屬性事件
二.做用域內存
var的做用域作用域
var聲明的變量,做用域分兩種
全局做用域
在window下聲明的變量或者在函數外申明的變量
局部做用域
在函數內聲明的
瞭解預覽器的機制
預覽器在執行時候,會首先開闢一個大空間叫window,window下面主要分兩個模塊,一個叫棧,一個叫堆, 棧用來存放變量的內存地址 堆主要存放代碼塊 而後預覽器從上到下執行代碼
function申請的變量
function聲明的變量也會給window添加一個屬性,屬性值是方法
函數歸屬: 函數歸誰,跟調用無關,跟他在哪定義有關
任何函數都有一個返回值,若是寫了return那個return的是什麼就獲得什麼,若是沒有return獲得的是undefined
函數在if中的特殊狀況
在if語句中定義的函數,只聲明不定義,當條件成立的時候,if模塊中無論函數在哪聲明的函數,都會第一步對這個函數先定義,在去執行if裏面的代碼
三.塊級做用域
帶{}的都是塊級做用域,if(){} for(){} 對象{}
var沒有塊級做用域這個概念 let和const有塊級做用域這個概念
1.在塊級做用域下 var 和 function 跟在window不同,function有個特殊的,在塊級做用域前指令會提早聲明不會定義
2.在塊級做用域下 let 和 const 聲明的變量是私有的,外面訪問不到
3.for 循環下let聲明的變量不會泄露
事件時異步的,for循環結束以後i是3而且i仍是是全局的,點擊了li最後alert出i,i此時是3,因此都會彈出3。
塊級做用域和對象
若是{}表示對象,不能放在行首,就是{}前面沒有任何東西,若是有了就是對象。沒有就表明塊級做用域
eval('({name:"zhangsan",age:23})')
四.暫時性死區
若是塊級做用域內使用let和const命令聲明變量了,這個區域就會被這個變量強制綁定,凡是在聲明以前這些變量都是不可用的,使用會報錯,這就是暫時性死區。
暫時性死區場景
使用變量b在定義變量b以前了, 出現了暫時性死區
let a=a報錯,賦值運算是從左到右,右邊使用變量a結果發現a沒有聲明,而let語法規定不能再沒定義前使用變量,因此報錯
var a=a;不報錯,由於var能夠變臉提高在等號賦值的時候,是從右到左,使用變量a,此時a是undefined,賦值時就是把undefined賦值給a,因此a仍是undefined
函數參數默認值
1. 寫法上 有默認值的寫後面,沒有默認值的寫前面
2. 若是傳對應的參數,就不要默認值了,不是先賦默認值,而後用實參去覆蓋。