[toc]
### 1. let 有塊級作用域, var 沒有
```js
{
var a = 10;
let b = 20;
}
console.log(a); // 10
console.log(b); // b is not defined 報錯
```
### 2. var 在同一個作用域中可以重復聲明,let 不可以
### 3. var 存在聲明提前,let 不可以
### 4. for 循環中的 var 與 let
1) for中var i會對外界產生影響
```
for(var i=1; i<5; i++){
console.log(i); //1, 2, 3, 4
}
console.log(i); //5
```
for中let i的作用域僅限for循環內
```
for(let i=1; i<5; i++){
console.log(i); //1, 2, 3, 4
}
console.log(i); //i is not defined
```
2) for中var i中會覆蓋外界上層的聲明
```js
var i = 3;
for(let i=1; i<5; i++){
console.log(i); //1, 2, 3, 4
}
console.log(i); //5
```
3) 用var聲明的for循環會跳過點擊事件,當點擊事件執行的時候,i返回for循環最后得出的值
```
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
var lis = document.getElementsByTagName("li");
for(var i=0; i<lis.length; i++){
lis[i].onclick = function(){
// lis[i].style.color = "red"; //無法執行,因為沒有lis[3]
//改成this.style.color = "red"可以執行
console.log(i); //i=3
}
console.log(i); //0, 1, 2
}
</script>
```
4) let會正常執行
```
var lis = document.getElementsByTagName("li");
for(let i=0; i<lis.length; i++){
lis[i].onclick = function(){
// lis[i].style.color = "red"; //可以正常執行, lis[i]返回點擊的i值
console.log(i);
}
console.log(i);
}
```
```
var num1 = 55;
var num2 = 66;
function f1(num, num1) {
num = 100; //此時傳入的55變為100
num1 = 100; //此時傳入的66變為100
num2 = 100; //該函數內沒有num2,因此var num2 = 100覆蓋了全局變量num2變為100
console.log(num); //100
console.log(num1); //100
console.log(num2); //100,只有外界的全局變量num2受到函數的影響
}
f1(num1, num2); //傳入55, 66
console.log(num1); //55
console.log(num2); //100
console.log(num); //報錯,而不是undefined
```
- JavaScript
- 1. DOM事件流
- 2. 模擬 new, Object create(), bind
- 5. 封裝函數進行字符串駝峰命名的轉換
- 6. 什么是promise
- 7. 判斷一個數是否為數組
- 10. __proto__和prototype以及原型,原型鏈,構造函數
- 11. 繼承
- 12. 閉包
- 13. 回調函數
- 14. var 和 let 區別
- 15. this、bind、call、apply
- 16.undefined和null的區別
- 17.內存泄漏
- 18.垃圾回收機制
- html css
- 1. 元素垂直水平居中
- 2. 清除浮動
- 3. bootstrap柵格系統
- 4. px rpx em rem vw 的區別
- 5. 兩種盒子模型
- 6. 合集
- web類
- 1. html5的新特性以及理解(web標簽語義化)
- 2. 什么是路由,關于前端路由和后端路由
- 3. 對優質代碼的理解
- 4. cookie 和 sessionStorage和localStorage
- 5. 瀏覽器內核
- 6. http 狀態碼
- 7. href 和 src 的區別
- 8. link 和 @import 的區別
- 9. http 狀態碼
- 10. websocket
- 11. 瀏覽器解析url
- 12.http緩存
- vue
- 1.vue2和vue3有哪些區別
- 1. 對 mvvvm 的理解
- 2. mvvm的優缺點
- 3. 數據雙向綁定的原理
- 4. 生命周期
- 5. 組件如何通信
- 6. computed和watch的區別
- 7. proxy 和 Object.defineProperty
- 8. 虛擬dom和 diff算法
- 9. 路由的嵌套與傳參
- 10. 路由導航鉤子
- 11. axios 的理解
- 12. vue自定義指令 diretive
- 13. diff 的實現
- 14. 實現一個簡單的雙向綁定
- 15. 為什么 data 是一個函數
- 題譜
- js
- 手寫篇
- css
- vue
- react
- 算法
- 自我介紹
- 八股文
- 源項目地址
- 1.計算機網絡
- 2.瀏覽器
- 3.html和css
- 4.javascript
- 6.typescript
- 7.vue
- 8.react
- 大廠面試
- 面試題大全
- 常見性能優化
- 面試實戰
- 面試分析
- 押題
- 1.微前端在項目中的實際應用
- 2.性能優化
- vue相關
- 1.說一說HashRouter和HistoryRouter的區別和原理
- 無敵之路,牛客網面試題自測記錄
- 前端基礎
- 1.html
- 2.js基礎
- 珠峰性能優化
- WebWorker
- url到渲染
- 瀏覽器加載機制
- 自我介紹1
- 手寫題
- 1.compose
- 2.setTimeout模擬setInterval
- 3.手寫數組拍平
- 4.手寫promise.all
- 5.手寫深拷貝
- webpack
- 實戰