let,const,var的区别

这里的声明提升存在疑点,涉及到暂存性死区

在这里插入图片描述

重复定义:

只有const不行,会报错
let var 可以重复定义 const不可以

<body>
    <input type="text" placeholder="aaa">
    <button>发表评论</button>
    <div></div>
</body>
<script>
    var text=document.querySelector("input[type='text']");
    var button=document.querySelector("button");
    var div=document.querySelector("div");
    button.onclick=function(){
        let content=text.value;
        content="11111";
        div.innerText=content;
    }
</script>

修改值

const 定义数组和对象时,可以修改值

<script>
    var text=document.querySelector("input[type='text']");
    var button=document.querySelector("button");
    var div=document.querySelector("div");
    button.onclick=function(){
        const content=[]
        content[0]=text.value;
        content[1]="1234";
        div.innerText=content[1];
    }
</script>

声明提升

<body>
    <p class="p1">床前明月光</p>
    <p class="p2"></p>
</body>
<script>
    var p1=document.querySelector("p.p1");
    var p2=document.querySelector("p.p2");
    p2.innerText=content;
    var content="疑似地上霜";
</script>

只有var 时,出现underfined
let const时,都会报错
在这里插入图片描述

块级作用域

修改第二行内容:
以前喜欢用函数创建块级作用域

<body>
    <p class="p1">床前明月光</p>
    <p class="p2"></p>
</body>
<script>
    var p1=document.querySelector("p.p1");
    var p2=document.querySelector("p.p2");
    
    var content="疑似地上霜";
    function fn(){
        var content="李白睡的香";
        return content;
    }
    p2.innerText=fn();
</script>

现在可以使用let const使用块级作用域实现(var不行)

循环

<style>
    div{
       display: inline-block; 
       width: 100px;
       height: 100px;
       background-color: pink;         
    }
</style>
<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</body>
<script>
    var li=document.querySelectorAll("div");
    for(let i=0;i<5;i++){
        li[i].onmouseover=function(){
            var text=document.createTextNode(i);
            this.appendChild(text);
            this.style.height=i*100+100+"px";
        }
    }
    
</script>

在这里插入图片描述

for循环里的let关键字 不能变为var关键字
var关键字没有形成块级作用域,经过5次循环,

{var i=0;}
{var i=1;}
{var i=2;}
{var i=3;}
{var i=4;}
console.log(window.i);

i已经变成4了,mouseover之后会执行回调函数里的代码,这时,this也就是 li[i]找不到就会在window下找,这时i=4;
为了迫使形成块级作用域,就可以使用let。

这里想到一个问题,点击不同的按钮,弹出不同的值也是可以实现的:

<body>
    <button>button</button>
    <button>button</button>
    <button>button</button>
    <button>button</button>
    <button>button</button>
</body>
<script>
    var li=document.querySelectorAll("button");
    for(let i=0;i<5;i++){
        li[i].onclick=function(){
            alert(i);
        }
    }
    
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值