ES6变量声明
let
- 作用声明局部变量 ,作用域在最近的{}之间.
 - 不会进行变量名声明提升
 - 不能重复声明
 
在 es6 之前,声明局部变量要使用立即执行函数
{
    let a = 1
}
console.log(1) //报错
{
    let a = 1
    {
        console.log(a)//报错
        let a =2
    }
}
{
    let a = 1;
    let a = 2;//报错
}
const
同 let,但只有一次赋值机会,必须在声明的时候赋值.
{
const a //报错
}
面试题
1.
for(var i = 0;i < 6;i++){
    ///
}
console.log(i);/6
解:
变成
var i
for(i = 0;i < 6;i++){
    0,1,2,3,4,5
}
console.log(i);/6
2.
for(var i = 0;i < 6;i++){
    function fn(){
        console.log(i)
    }
    button.onclick = fn//因为执行的时候i已经变成6了.
}
6
3.
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
var liTags = document.querySelectorAll('li');
for(var i = 0;i<liTags.length;i++){
    liTags[i].onclick = function(){
        console.log(i);//不管点哪个按钮,都是6
    }
}
改成
for(var i = 0;i<liTags.length;i++){
    (function(){
        var j = arguments[0];//外面的i赋值给j
        liTags[i].onclick = function(){
            console.log(j)//点哪个打印哪个
        }
    })(i)
}
或者
for(var i = 0;i<liTags.length;i++){
    let j = i;
    liTags[j].onclick = function(){
        console.log(j)//点哪个打印哪个
    }
}
或
for(let i = 0;i<liTags.length;i++){
    liTags[i].onclick = function(){
        console.log(i);//点哪个打印哪个
    }
}
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!