美文网首页
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>

相关文章

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 2.Dart面向对象

    函数 命名可选参数{} 位置可选参数[] 作用域定义:与js的作用域一致,层层向上找。 Dart函数闭包 js函数...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • JS作业(函数与作用域)

    1.创建函数有哪些方法?分别有什么特点?①使用 "函数声明" 创建函数函数声明具有函数声明提升的特点,将函数声明提...

  • 作用域与变量提升

    作用域与变量提升 作用域 JS中变量的作用域有全局作用域和局部作用域两种,作用域简单来讲就是变量与函数的可访问范围...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • js作用域

    词法作用域 -js采用的是词法作用域,函数的作用域基于函数创建的位置。

  • PHP变量作用域

    变量作用域:1,全局作用域global,2,局部作用域,3,静态作用域 1,与js相似,变量写在函数以外叫做全局变...

  • 闭包

    js的作用域分为全局作用域,和函数作用域, 内部作用域可以访问外部作用域的函数参数,外部不能访问内部函数的变量和参...

网友评论

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

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