美文网首页
JS作业(函数与作用域)

JS作业(函数与作用域)

作者: 仙姑本姑 | 来源:发表于2019-12-09 16:51 被阅读0次

    1.创建函数有哪些方法?分别有什么特点?
    ①使用 "函数声明" 创建函数
    函数声明具有函数声明提升的特点,将函数声明提升到作用域顶端,意思是在执行代码之前会先读取函数声明,也就是说可以把函数声明放在函数调用的后面。

    语法:

            *         function 函数名([形参1,形参2...形参N]){
            *             语句...
            *         }
    

    ②使用 "函数表达式" 来创建一个函数

    var 函数名  = function([形参1,形参2...形参N]){
            *      语句....
            *  }
    

    可分为命名函数表达式匿名函数表达式两种

               // 1.命名函数表达式
               var testA=function abc(){
                          console.log(aaa);
                        }
            // 2.匿名函数表达式  --最常用简称函数表达式
                var testB=function(){
                          console.log(bbb);
                           }
    

    函数表达式与函数声明最明显的区别是它不具有变量提升属性,如使用函数声明时,将函数调用放在前面:

    test();//弹出hello,因为函数声明提升,函数调用之前,已经读取了该函数完成了声明
     
                function test(){
                    alert("hello");
                }
    

    而如果在函数变量式中:

     test();//报错:Uncaught ReferenceError: test is not defined
     
                //在函数调用时,作用域中还未读取该函数的定义
                //作用域读取函数表达式是按照代码顺序读取
                var test = function(){
                    alert("hello");
                }
     
                test();//弹出hello
    

    ③使用 "构造函数"
    构造函数的执行流程:

    • 1.立刻创建一个新的对象

    • 2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象

    • 3.逐行执行函数中的代码

    • 4.将新建的对象作为返回值返回

    var 对象名{
      属性名 1:属性值;
      属性名 2:属性值;
    ....
    函数名 1:function(形参...)
      {函数体 1},
    函数名 2:function(形参...)
      {函数体 2},
    .....
    }
    

    举例:

    var zjl = {
      name:"周杰伦”,
      gender:"male",
      setAge:function(age){
      this curage=age;
      }
    };
    

    this关键字代表zjl这个对象,this.curage就是把形参的值赋给zjl这个对象的courage属性,如果用同样的方法给属性name和gender赋值,赋值后name和gender的初始值就会被覆盖。如果不加this,curage就不是对象zjl的属性了,而是一个全局变量,如果是var courage,那它就是setAge里的局部变量,不再是zjl的属性了,加了this关键字的方法和属性叫做公有方法和属性。
    2.见如下代码,b会打印出什么?

    (function() {
       var a = b = 5;
    })();
     
    console.log(b);
    

    b为5
    详细分析:

     (function() {
                var a = b = 5;
                console.log(typeof a);//number
                console.log(typeof b);//number
            })();
            console.log(typeof a);//undefined
            console.log(typeof b);//number
    

    var a = b =5其实等价于var a = bb=5
    同理,如果等式更长,如var a=b=c=d=5,它等价于var a=(b=(c=(d=5)));因为赋值是从右向左结合,其中只有a被声明了,b,c和d可以看作都是自动解析为全局变量。
    3.编写一个函数,实现一个输出 n (n > 0,否则返回原字符串)遍连接后的 str 功能,如下:

    var a = repeatStr('hello', 2);  //hellohello
    var a = repeatStr('hello', 4);  //hellohellohellohello
    

    思路,将字符串看作join的连接符,给一个空数组添加个数为重复次数加一的连接符
    实现如下:

    <!DOCTYPE  HTML>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>repeatStr</title>
    
        <script type="text/javascript">
            function repeatStr(str, num) {
                document.write(new Array(num + 1).join(str) + '<br>');
            }
            var a = repeatStr('hello', 2);
            var a = repeatStr('hello', 4);
        </script>
    </head>
    
    <body>
    </body>
    
    </html>
    

    4.以下代码的执行结果是:

    function test() {
       console.log(a);//undefined
       console.log(foo());//2
       
       var a = 1;
       function foo() {
          return 2;
       }
    }
     
    test();
    

    5.以下代码的执行结果分别是:

    function foo(){
        return 1;
    }
    var foo;
    console.log(typeof foo);//function
    function foo(){
        return 1;
    }
    var foo = 1;
    console.log(typeof foo);//number
    

    6.编写一个函数,实现一个乘法计算器:无论输入多少个数字参数,最终都返回参数的乘积。例如:

    var a = multiplicationCalculator(3, 6); // 18
    var b = multiplicationCalculator(3, 6, 2); // 36
    var c = multiplicationCalculator(1, 2, 5, 6); // 60
    .........
    
    <!DOCTYPE  HTML>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>multiplicationCalculator</title>
    
        <script type="text/javascript">
            function multiplicationCalculator() {
                var num = 1;
                for (i = 0; i < arguments.length; i++) {
                    num *= arguments[i];
                }
                document.write(num + "<br>");
            }
            multiplicationCalculator(3, 6);
            multiplicationCalculator(3, 6, 2);
            multiplicationCalculator(1, 2, 5, 6);
        </script>
    </head>
    
    <body>
    </body>
    
    </html>
    

    7.编写一个函数,实现如下语法的功能:var a = add(2)(3)(4); // 9,提示:2 + 3 + 4 = 9

    <!DOCTYPE  HTML>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>repeatStr</title>
    
        <script type="text/javascript">
            function add(a) {
                var num = 0;
                num += a;
                return function add(b) {
                    num += b;
                    return function add(c) {
                        num += c;
                        document.write(num);
                    }
                }
            }
            add(2)(3)(4);
        </script>
    </head>
    
    <body>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:JS作业(函数与作用域)

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