zoukankan      html  css  js  c++  java
  • javascript面试题

    javascript面试题

    1.面试题1

     var a = {n: 1}
     var b = a
     a.x = a = {n: 2}
    
    console.log(a.n, b.n)     // 2, 1
    
    console.log(a.x, b.x)     // undefined, { n: 2 }
    
    
    /*
    题解:前俩步非常简单,变量a和变量b同时指向一个对象
        
            第三步的时候,我们知道赋值运算符都是从右边开始赋值的,但是
    
            a.x点的优先级是最高的,因此会先执行a.x,在a和b共同指向的对象
    
            中添加一个x属性,并且赋值为undefined,要注意是在a变量和b变
    
            量共同指向的对象上。此时执行从右边开始赋值,在a = { n: 2 }
        
            很显然a被重新指向了一个新对象,此时又把新对象a赋值给,之前
    
            a和b变量共同指向的对象中的x属性,那么就ok了,b.x可以拿到
    
            { n: 2 },而a.x是undefined就很正常了,因为此时的a指向的是
    
            一个新对象,新对象中并没有指定过x属性,b.x可以访问到,是因为b对象指向的还是原来的对象。
                
            */

    2.面试题2

    function fun(n, o) {
          console.log(o)
          return {
            fun: function (m) {
              return fun(m, n)
            }
          }
    }
    
    var a = _fun_(0)     // undefined
    
    a.fun(1)    // 0
    
    a.fun(1)    // 0
    
    a.fun(1)    // 0
    
    
    /*
    
        题解:
        
            1.第一步是undefined很好理解,因为函数中打印的是第二个参数,
    
             2.指向第二部的时候,此时再函数指向完毕时就会产生一个闭包
    
            相当于fun(1, 0),此时每次每次调用的时候,都是将闭包中作用域
        
            信息传递到函数指向环境中,供函数执行时获取变量值时使用。
    */
    
    
    // 如果不好理解请看下面的改造,其运行结构和上面一样
    
    function _fun_(n, o) {
          console.log(o)
          return {
            fun: function (m) {
              return _fun_(m, n)
            }
          }
    }
    
    var a = _fun_(0)
    a.fun(1)
    a.fun(1)
    a.fun(1)
    
    
    
    // 接下来继续看
    
    function fun(n, o) {
          console.log(o)
          return {
            fun: function (m) {
              return fun(m, n)
            }
          }
    }
    
    var a = fun(0).fun(1).fun(2).fun(3)    // undefined 0 1 2
    
    // 可以理解成下面这样
    
    var a = fun(0)
    
    var a1 = a.fun(1)
    
    var a2 = a1.fun(2)
    
    var a3 = a2.fun(3)
    
    /*
    
        这样看起来就很好理解了,第二次调用a.fun(1)此时产生了一个闭包
        
        第三步a1.fun()的时候,a1对象中有一个闭包引用了fun函数的变量
    
        所以匿名函数执行的函数调用为_fun_(2,1),输出结果为1, 
    
        并返回一个新的对象。a2.fun()的时候使用的是a1.fun()调用产生的闭包,以此类推
    */
  • 相关阅读:
    定时器
    SysTick
    13.看门狗
    12.FSMC
    11.中断
    ##HTML行内块元素好迷啊!!
    ##HTML基础
    ##CS3动画效果
    ##管家婆项目(tools层)
    ##管家婆项目(app层)
  • 原文地址:https://www.cnblogs.com/zxuedong/p/12752878.html
Copyright © 2011-2022 走看看