zoukankan      html  css  js  c++  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()); //undefined
    4         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 : sum
    5                 }
    6             }

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

                       然而:  

    1         var func = function (x, y) {
    2             var sum = x + y;
    3             return
    4             {
    5                 value: sum
    6             };
    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));  //300
    5         var other = add;  //other和add引用同一函数对象
    6         console.info(other(300, 400)); //700
    7         console.info(typeof other);   //function
    8         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
  • 相关阅读:
    496. 下一个更大元素 I
    20200516文献速递
    20200510文献速递
    beta,or, p value计算zscore
    20200503文献速递
    古人以及其他灵长类动物基因组数据
    20200420-0426文献速递
    使用snpflip校正基因组正负链
    使用qqman对曼哈顿图(Manhattan plot )多个显著位点标志不同颜色,拒绝屎一样的绿色
    RAEdb:基于STARR-seq和MPRA数据的enhancers和Epromoters可视化
  • 原文地址:https://www.cnblogs.com/xiaoguanqiu/p/4635344.html
Copyright © 2011-2022 走看看