你的位置:首页 > Java教程

[Java教程]Javascript我学之二函数定义


  本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘

函数

几个要点:

                a).函数是javascript中的一等公民 (重要性)

                b).函数是一个对象
                c).函数定义了一个独立的变量作用域

 

定义方式

a)命名函数:

          除非在另一个函数内部定义,否则,命名函数是全局的。  

1         // 全局的命名函数2     function add(x, y) {3       return x + y;4     }5     console.info(add(100, 200));  //300

b)匿名函数:    

            匿名函数通常赋值给一个变量,再通过变量调用。

    var func = function (x, y) {      return x + y;    }    console.info(func(5, 2)); //7

            匿名函数适用于以下这种 “立即执行的匿名函数” 的情况:

    console.info(      function (x, y) {            return x + y;          }(100, 200)  //立即调用        );

C)定义方式影响代码执行效果

                命名函数可以先使用,再定义

    console.info(sum(10, 10));    function sum(num1, num2) {      return num1 + num2;    }

              匿名函数必须先定义,再使用

    //console.info(sumFunc(10, 10));  //Uncaught TypeError: Property 'sumFunc' of object [object Object] is not a function     var sumFunc = function (num1, num2) {      return num1 + num2;    };    console.info(sumFunc(10, 10));

函数返回值:

                 用return 生成返回值.如没有return ,则函数返回undefined

1     function func() {2     }3     console.info(func()); //undefined4     function func2() {5       return; //空的返回语句6     }7     console.info(func2()); //undefined

return里藏着的坑:

1       var func = function (x, y) {2         var sum = x + y;3         return {4           value : sum5         }6       }

                   这么写没有问题:   调用 func(5,5)    返回的是 Object {value: 10}

                   然而:  

1     var func = function (x, y) {2       var sum = x + y;3       return4       {5         value: sum6       };7     }8     console.info(func(5,5)); //undefined

 

                   return 后面跟着个回车换行的话,
                   调用 func(5,5)    显示的是 undefined
                   编辑器帮我们在return后加了个分号;   然而在这情况下并没有什么卵用。
 

函数即对象:

1     function add(x, y) {2       return x + y;3     }4     console.info(add(100, 200)); //3005     var other = add; //other和add引用同一函数对象6     console.info(other(300, 400)); //7007     console.info(typeof other);  //function8     console.info(add === other); //true

嵌套定义的函数:


                  在函数内部,可以定义另一个函数。
1     function outerFunc(a, b) {2       function innerFunc(x) {3         return x * x;4       }5       return Math.sqrt(innerFunc(a) + innerFunc(b));6     }7     console.info(outerFunc(3, 4)); //5

访问外部变量:


             内部函数可以访问外部的变量与参数。
 1     var globalStr = 'globalStr'; 2     function outerFunc2(argu) { 3       var localVar = 100; 4       function innerFunc2() { 5         localVar++; 6         console.info(argu + ":" + localVar + ":" + globalStr); 7       } 8       innerFunc2(); //hello:101:globalStr 9     }10     outerFunc2("hello");

返回函数的函数:

               因为函数是对象,所以可以作为返回值。

1       function outerFunc(x) {2         var y = 100;3         return function innerFunc() {4           console.info(x + y);5         }6       }7       outerFunc(10)(); //110