var 聲明的變量存在變量提升,而let const 聲明的變量不存在變量提升,所以一定要先聲明再使用
在js中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部,也就說var聲明的變量可以先使用再聲明
console.log(q)
var q = 1;
//打印undefined 變量提升
//JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。
//JavaScript 中,變量可以在使用后聲明,也就是變量可以先使用再聲明。
f();
fn();//fn is not a function
//函數(shù)表達(dá)式
var fn = function(){
console.log(1)
}
//函數(shù)聲明
function f(){
console.log(0)
}
//函數(shù)提升,只會提升函數(shù)聲明,而不是提升函數(shù)表達(dá)式
//let const 聲明的變量不存在變量提升,所以一定要先聲明再使用
// es6明確規(guī)定,如果區(qū)塊中存在let命令,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域,凡是在聲明之前就使用這些變量,會報錯,
// 所以在代碼塊內(nèi),使用let聲明變量之前,該變量都是不可用的。這在語法上稱為暫時性死區(qū),在死區(qū)中禁止訪問該變量
// let聲明的變量存在變量提升,但是由于死區(qū)我們無法在聲明前訪問這個變量
console.log(b) //Uncaught ReferenceError: Cannot access 'b' before initialization
let b =2;
let關(guān)鍵字可以將變量綁定到所在的任意作用域中,通常是{...}內(nèi)部
let是塊級作用域,即在整個{}內(nèi)可見
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</body>
//for循環(huán)有一個特別之處,就是循環(huán)語句部分是一個父作用域,而循環(huán)體內(nèi)部是一個單獨(dú)的子作用域
var div = document.querySelectorAll('div');
for(let i=0;i<div .length;i++ ){
div[i].onclick = function(){
console.log(i) //輸出對應(yīng)下標(biāo)
}
}
for(var i =0; i<div.length;i++){
div[i].onclick = function(){
console.log(i) //每次都輸出5
}
}
//在沒有l(wèi)et之前想要輸出對應(yīng)下標(biāo),用閉包解決
for(var i=0;i<div.length;i++){
(function(i){
div[i].onclick = function(){
console.log(i)
}
})(i)
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。