boost log 能不能循环覆盖_记一次for循环中let是声明还是赋值
生活随笔
收集整理的這篇文章主要介紹了
boost log 能不能循环覆盖_记一次for循环中let是声明还是赋值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//同事討論遇到一個很有意思的話題
//for循環里面的i循環第二次是賦值還是重新聲明
for(let i=0;i<100;i++){console.log(i)
}
//對于這個問題正常解釋
//如果是var了
for(var i=0;i<100;i++){console.log(i)
}
/*
那么這樣的肯定毫不猶豫的說 第二次循環是賦值,但是let了,畢竟let是塊級作用域。因為沒辦法去解釋,
想到用babel轉換成ES5
https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=GYewTgFANgpgLgAgJYF4AMBuJAeAjGzJAaiIEoBvAKAQQGMQA7AZxFgDooQBzCJUjSgF9K9ZqxgduvUkA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=es2015%2Creact%2Cstage-2&prettier=false&targets=&version=7.4.5&externalPlugins=
*///轉換代碼讓我大吃一驚
//源代碼
let arr = []
for(let i=0;i<100;i++){arr[i] = function(){console.log(i)}
}
console.log(i)
//babel轉換后的
"use strict";
var arr = [];var _loop = function _loop(_i) {arr[_i] = function () {console.log(_i);};
};for (var _i = 0; _i < 100; _i++) {_loop(_i);
}console.log(i);
//看著一臉懵逼 這就換了個變量名啊,算也是解決了一系列問題
//如果按照這個來說 那肯定依舊是賦值操作而非聲明
//看來這個是沒辦法證明了 那就用支持es6的瀏覽器試一下
//于是我就在chrome控制臺敲入代碼
for(let i=0;i<100;i++){debugger
}
//單步調試 依舊是賦值操作 let i只運行了一次
//但是依舊說服不了自己
//于是想到什么東西可以監聽到賦值還是聲明了 忽然想到const特性 修改就報錯
//于是寫下
for(const i=0;i<100;i++){console.log(i)
}
//支持就報錯
//VM66:1 Uncaught TypeError: Assignment to constant variable.// at <anonymous>:1:22
//至此應該完全證明了猜想 此循環第二次是賦值操作//那又有同事好奇 這個key第二次循環是賦值還是聲明新的變量
for(let key in {id:1,name:'2'}){console.log(key)
}
for(const key in {id:1,name:'2'}){console.log(key)
}
//以上兩個運行都正常 初步證明是聲明了新變量//還有個疑問 竟然let是塊 到底作用到什么地方
for(let i=0;i<100;i++){let i = 1000;console.log(i);
}
console.log(i)//看完這個結果 應該有答案了
總結
以上是生活随笔為你收集整理的boost log 能不能循环覆盖_记一次for循环中let是声明还是赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vat可以退税吗_【涨知识】企业对外投资
- 下一篇: 十代i7前端总线频率_Intel 10n