美文网首页让前端飞
JS作用域链&引用类型

JS作用域链&引用类型

作者: 小7丁 | 来源:发表于2018-07-29 15:45 被阅读2次

    一、立即执行函数表达式是什么?有什么作用?

    (function(){ /* code */ }());
    
    (function(){ /* code */ })();
    
    • 上面这种写法就是立即执行函数表达式。以圆括号开头,js就会认为这是一个表达式,而不是函数定义语句,所以就避免了错误。
    • 为什么要用立即执行函数表达式?有时候我们需要在定义函数之后,立即应用函数。而因为function出现在行首一律解释成语句,即然是函数的定义,就不能够以圆括号结尾。所以用圆括号开头就可以使其变成一个表达式, 而避免错误。
      一是不必为函数命名,避免了污染全局变量;
      二是函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

    二、求n!,用递归来实现。

    function factorial(n){
        if(n === 0) {
          return 1
      }
        if(n === 1){
            return 1
        }
        return n * factorial(n - 1)
    }
    factorial(3)
    

    三、写一个函数,返回参数的平方和?

       function sumOfSquares(){
          var result = 0
          for(var i=0; i<arguments.length; i++ ){
             result += arguments[i]*arguments[i]
        }
            return result
       }
       var result = sumOfSquares(2,3,4)
       var result2 = sumOfSquares(1,3)
       console.log(result)  //29
       console.log(result2)  //10
    

    四、如下代码的输出?为什么?

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);
    console.log(obj1 = obj2);
    console.log(obj1 == obj2);
    

    false//因为obj1和obj2所指向的地址不相同
    {a : 1,b :2}//将obj2赋值给obj1
    true//由于上一步赋值,现在两个的地址相同

    相关文章

      网友评论

        本文标题:JS作用域链&引用类型

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