函数作用域数组复习

50 阅读1分钟

1.数组练习

两个数组 数组A 数组B

数组A为固定初始数组['jojo','okok','张三','小伙子','秃头']

数组B为用户动态选择添加的值[] 不确定

需要 将数组B中前N为添加到 数组A中

数组A 有限制长度为 7

   

    var A = ['jojo','okok','张三','小伙子','秃头']

    var B = [1,2,3,4]

    //输出['jojo','okok','张三','小伙子','秃头',1,2,3]

  
    //简单实现 循环push

    // for(var i = 0;i<7 - B.length;i++){

    //   A.push(B[i])

    // }

    // console.log(A)

   

    //函数实现+数组方法 concat 合并 输出新数组   slice 切割数组 输出切割部分

    function fn(arra,arrb){

      var maxLen = 7

      var len = arra.length

      var newarr = arra.concat(arrb.slice(0,maxLen-len))

      return newarr

    }

    console.log(fn(A,B))

作用域练习

//作用域练习

console.log(x);//undefined

    f1()

    var x = 0

    function f1(){

      f2()

      var x = 20

      function f2(){

        x = 20

        console.log(x)//20

      }

    }

    console.log(x)//0

   

console.log(a)//函数体

    function a(){

      a = 20

    }

    a()

    console.log(a)//20

    var a = 30

    console.log(a)//30

重点欺骗问题***

//重点欺骗问题

    function f1(){

      var arr = []

      for(var i = 0;i<10;i++){

        arr.push(function (){

          return i

          //数组内存的实际是函数的地址值 都指向函数

          //i最后等于10 因为 for循环结束后 i还会++1次

          //值只要没有被用到 都不是值 只有用到的时候 才会找相应的地址

        })

      }

      return arr

    }

    console.log(f1()[3]())

    console.log(f1())

    //f1()表示arr f1()[3]=arr[3]

    f1()[3] //调用f1() 输出arr arr的每一项 又需要运行for循环 push了一个函数 但函数没有调用

    f1()[3]()//10 调用的时候 for循环早结束了 i =10 此时调用函数 i等于10