區別的話,
1:作用域不一樣,var是函數作用域,而let是塊作用域,也就是說,在函數內聲明了var,整個函數內都是有效的,比如說在for循環內定義了一個var變量,實際上其在for循環以外也是可以訪問的,而let由於是塊作用域,所以如果在塊作用域內(比如說for循環內)定義的變量,在其外面是不可被訪問的,所以let用在for (let i; i < n; i++)是一種很推薦的寫法
2. let不能在定義之前訪問該變量,但是var是可以得。也就是說,let必須是先定義,再使用,而var先使用后聲明也行,只不過直接使用但是沒有卻沒有定義的時候,其值為undefined,這塊要注意,這一塊很容易出問題,這也是個人認為的let比var更好的地方,至於為啥會有這種區別呢,實際上var有一個變量提升7a686964616fe59b9ee7ad9431333431346462的過程。也就是說,當這個函數的作用域被創建的時候,實際上var定義的變量都會被創建,並且如果此時沒有初始化的話,則默認會初始化一個undefined。
3. let不能被重新定義,但是var是可以的。這個呢,我個人認為,從規范化的角度來說,是更推薦的,比如說,你在前面聲明了一個變量,后來寫代碼,因為忘了之前的代碼邏輯,又聲明了一個同名的變量,如果這倆變量邏輯不一樣,並且后面都要用的話,很容易出問題,且不容易維護。
總之呢,let從規范化的角度來說,要比var要進步了很大一步。所以一般情況下的話,推薦用let,const這些。
請戳:百度知道
http://www.lht.ren/article/15/
http://www.lht.ren/article/16/