美文网首页
let相关面试题

let相关面试题

作者: kzc爱吃梨 | 来源:发表于2019-09-26 10:17 被阅读0次

    第一题

    var i
    for( i=0; i<6; i++){
      function fn(){
        console.log(i)
      }
      fn()
    }
    
    结果是0,1,2,3,4,5
    

    第二题

    for(var i=0; i<6; i++){
      function fn(){
        console.log(i)
      }
      btn.onclick = fn //6
    }
    // 点击的时候i早已变成6了
    console.log(i) //6
    

    第三题 console.log(i)为几,为什么,怎么打印对应的数值

      <ul>
        <li>导航1</li>
        <li>导航2</li>
        <li>导航3</li>
        <li>导航4</li>
        <li>导航5</li>
        <li>导航6</li>
      </ul>
    
      <script>
        var li = $('ul>li')
        for(var i=0; i<li.length; i++){
          li[i].onclick = function(){
            console.log(i)  //6
          }
        }
    
        console.log(i) //6
      </script>
    

    由于i早就变成了6,的、所以console.log(i) //6


    错误方法

        var li = $('ul>li')
    
        var i
        for(i=0; i<li.length; i++){
          var j=i
          li[j].onclick = function(){
            console.log(j)
          }
        }
        console.log(i,j) //6 5
    
    相当于
        var i
        var j
        for(i=0; i<li.length; i++){
          j= i
          li[j].onclick = function(){
            console.log(j)
          }
        }
    

    由于j会提前,并没有储存五个i,就随着i边,所以打出来j是5。

    正确方法:

        var i
        for(i=0; i<li.length; i++){
          let j=i
          li[j].onclick = function(){
            console.log(j)
          }
        }
    

    由于let的作用域只在{}之间,每次循环都有一个新的j对应一个i(let声明变量只能赋值一次),所以能打出对应的j。

        for(let i=0; i<li.length; i++){
          li[i].onclick = function(){
            console.log(i)
          }
        }
    
    image.png

    相关文章

      网友评论

          本文标题:let相关面试题

          本文链接:https://www.haomeiwen.com/subject/kckmuctx.html