es6新增let命令用來聲明變量,但是與var的區(qū)別是let聲明的變量只在let所在的代碼塊里面有效[圖片上傳失敗...(image-ecfc47-1526016908749)]
我一直很好奇的是在for循環(huán)里面使用let和var的那種神奇差別到底是怎么產(chǎn)生的,尤其是每次面試題里面出現(xiàn)這個(gè),然后我只能回答的知其然而不知其所以然的時(shí)候,如鯁在喉,難過,好了今天看見一篇帖子嗯瞬間就明白了
- js是弱類型語言,我們可以看見變量 i 的類型會根據(jù)賦值的不同而改變
var i = 0;
(function () {
console.log(typeof i);
i = 'zb';
console.log(typeof i);
}());
console.log(i + '$$$')
// number --> 第一次在全局定義為number型
// string --> 重新賦值以后變?yōu)閟tring類型
// zb$$$
- 但是如果是for循環(huán)呢,你會發(fā)現(xiàn)會有所不同
console.log(i + '****');
console.log(typeof i);
for (var i = 0; i < 3; i++) {
console.log(typeof i);
var i = 'qbc';
console.log(typeof i);
console.log(i);
}
console.log(typeof i);
console.log(i);
console.log(i + '$$$');
// undefined****
// undefined --> 初次未定義
// number --> for循環(huán)定義為number型
// string --> for循環(huán)內(nèi)部修改為string型
// qbc
// number -->但是為什么在外面還是被定義為number型,這真的是一個(gè)神奇的存在@2
// NaN
// NaN$$$
undefined
- @2 網(wǎng)上有一種說法就是for循環(huán)設(shè)置循環(huán)變量的那個(gè)作用域是父作用域,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域.