主要总结:

  • 函数值是一个带有参数的代码块,可以根据需要任意运行(调用)

  • 调用一个函数,我们会向它的形参传送实参。多余的形参会被转换为undefined。函数可以通过return语句向调用者返回结果。如果从来没有执行过return语句,则默认返回undefined

  • 一种好的编程实践是:在为函数做注释时,应当说明这个函数做些什么,而不是它如何做。

  • 在编写处理对象的函数时,必须做出决定:是希望这个函数修改其对象实参的的属性还是返回新对象。

  • JavaScript变量要么具有全局作用域,要么具有函数(局部)作用域。

  • JavaScript有两个属性:lengthprototypeprototype对象用于存储一些属性,可供该函数创建的所有对象访问,实际上就是允许定义新类型。我们可以向函数提供更多属性。

  • 有的函数可以作为对象的属性,有的函数可以通过this引用表达式引用对象的其他属性,这种函数称为方法。方法时OOP的核心概念。

  • 高阶函数就是以形参或者返回函数的函数,他们可以简化集中程序设计任务,可以减少脚本中的共同代码数量。

  • 函数可以用函数声明定义,可以直接使用函数表达式定义,也可以通过变量或对象属性指定函数表达式定义。函数声明虽然方便,却不能在某些上下文中使用,其作用域规则不够直观,会模糊一个事实:函数就是值,与其他值没有区别


练习:

  • 编写一个函数,返回两个实参的最大值。

        function large(x,y) {
            return x>y ? x : y;
        };

  • 编写一个函数,返回两个实参的平均值。

        function mean(m1,m2) {
            return (m1+m2)/mean.length
        };

  • 编写一个函数,返回一个数组中所有项目的平均值。

        function arrMean(arr) {
            var sum = 0;
            for (var i=0;i<arr.length;i++) {
                sum += arr[i];
            }
            return sum/arr.length;
        };

  • 解释运行以下脚本结果,回答中应当涉及"结合律"一词

        var cubeOf = function (x) {
            return x*x*x;
        };
        alert("魔方中共有:"+cubeOf(3)-1+" 个立方体");

我们分析一下alert中的语句,从左至右,第一个是字符串,后接一个加号,则说明此加号是做字符串连接符使用。继续往右,函数调用优先级是比加号高的,所以先执行函数调用,返回一个数字,再相加。此时应该是"....:27"注意接下来,一对字符串与一个类型为数值的数字做减号运算得到什么?我们知道,这其实是隐式转换数值的方法之一,所以JS会尝试把之前所以的字符串转换成数值类型来与1进行计算,不信试一下alert("15"-1)。但是失败了,所以会转换为NaN,注意,此时数值类型是number,alert(typeof NaN),然后NaN与后面字符串继续相加,又转换成了字符串类型。最后得到一个类型为字符串的字符串。


  • 编写一个函数,接受两个数字,并返回介于这两个值之间的一个随机数

        function random(n1,n2) {
            var randomArr = [];
            if (n1>n2) {
                for (var i=n2+1;i<n1;i++) {
                    randomArr.push(i);
                }
            } else {
                for (var j=n1+1;j<n2;j++) {
                    randomArr.push(j);
                }
            }
            return randomArr[[Math.floor(Math.random()*randomArr.length)+1]]
        };

  • 编写一个函数接受三个值,并返回其中值。三个数值的中值就是大于或等于另两值的一个,小于或等于剩下的那个值。(尼玛这形容)

    1. 中值也称中位数,即数据按升序或者降序排列,假如有n个数据,当n为偶数时,中位数为第n/2位数和第(n+2)/2位数的平均数;如果n为奇数,那么中位数为第(n+1)/2位数的值。

        function midValue(n1,n2,n3) {
            var arr = [n1,n2,n3];
            arr.sort(function (a,b) {return a-b});    // 升序排序
            return arr[((arr.length+1)/2)-1];        // 获得奇数位中位数,但由于数组计算方式所以-1
        };
    

  • 编写一个函数,返回一个给定数组中0的个数。

        function numberOfZeros(arr) {
            var counter = 0;
            for (var i=0;i<arr.length;i++) {
                if (arr[i]===0) {
                    counter++;
                }
            }
            return counter;
        };

  • 编写一个函数,返回一个给定字符在字符串中的出现次数。

        function strNum(str,x) {
            var arr = String(str).split("");
            var num = 0;
            alert(arr)
            for (var i=0;i<arr.length;i++) {
                if (arr[i]===x) {
                    num++;
                }
            }
            return num;
        };

Queen
139 声望20 粉丝