码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript基础(四)

时间:2019-09-27 21:24:08      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:声明   去重   出现   应该   reference   全局   函数表达式   标识   get   

JavaScript基础(四)
冒泡排序
// 准备一个需要进行排序的数组
var arr = [12, 88, 154, 23, 32, 15, 72, 2, 1, 66];

    // 根据分析出的规律进行代码实现
    // - 外层循环控制轮数:length - 1
    for (var i = 0; i < arr.length - 1; i++) {
        // - 内层循环控制每轮比较次数:
        //    - 设置条件时发现只 - i 不够,少了1,再设置一个 - 1 凑数
        for (var j = 0; j < arr.length - i - 1; j++) {
            // 比较当前项和后项的大小
            //  - 索引自动递增,后项的索引一定比当前项大1
            if (arr[j] > arr[j + 1]) {
                // - 交换两个位置的值即可
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    console.log(arr);

对冒泡排序的改进
    /* 
    小问题:
        - 规律中分析的是通用结论,每个数组需要比较length-1轮
        - 实际情况是,某些数组可能不需要这么多轮就可以排序完毕
    改进方式:
        - 希望可以在确定数组排序完毕后,将操作结束(多余的轮数就不执行了,提高效率)
        - 主要的点是:
            - 如何确定排序完毕
                - 实现方式:检测,某一轮中,是否进行了交换操作
                    - 如果某轮没有发生交换操作,说明排序完毕,break结束即可
    改进结果:
        - 达到了减少不必要轮数的目的
        - 执行的轮数比实际交换的轮数多1,因为最后一轮为结果的验证。

    */
    // 准备一个需要进行排序的数组: 
    //      这个数组其实只需要1轮就可以排序完毕,但是实际执行5轮
    var arr = [16, 8, 32, 53, 25, 3, 4, 5, 16];

    // 根据分析出的规律进行代码实现
    // - 外层循环控制轮数:length - 1
    for (var i = 0; i < arr.length - 1; i++) {
        // 在某轮代码开始时,声明一个变量保存状态
        var flag = '默认一开始没进行过交换';

        // console.log('执行了一轮操作');
        // - 内层循环控制每轮比较次数:
        for (var j = 0; j < arr.length - i - 1; j++) {
            // 比较当前项和后项的大小
            if (arr[j] > arr[j + 1]) {
                // - 交换两个位置的值即可
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;

                // 如果进入了if,进行了交换操作,修改flag的值
                flag = '不好意思,交换了';
            }
        }
        // 本轮中所有比较都执行完毕后,检测flag的最终状态
        //   - 如果还是默认值,说明没有进行交换,说明排序完毕,应该break结束
        if (flag === '默认一开始没进行过交换') {
            break;
        }

    }
    console.log(arr);
数组的去重操作
    例如:某个数组中具有一些重复的元素,通过操作得到新数组,新数组中的元素不重复。
    var arr = [1, 1, 2, 2, 3, 3, 4, 5];  处理后得到 var result = [1, 2, 3, 4, 5];
    var arr = [1, 1, 2, 2, 3, 12, 22, 22, 2, 3, 3, 4, 6, 5, 7, 2, 11, 3];
    // 1 声明一个用来保存结果的数组,这个数组的最终结果是不能重复的
    var result = [];
    
    // 2 遍历arr获取元素
    for (var i = 0; i < arr.length; i++) {
        // 希望将arr[i]放入到result中,前提是result中没有这个值
        // 需要检测arr[i]和result中的每个元素的关系
        //    - 注意:需要确保arr[i]和result中每个元素都不相同,而不是某一个不相同

        // - 针对当前arr[i]设置一个变量保存状态
        var flag = '默认没有一样的值';

        // 3 遍历result获取元素
        for (var j = 0; j < result.length; j++) {
            // 4 比较arr[i]和result[j]的关系
            if (arr[i] === result[j]) {
                // 5 如果找到相同的值,修改flag
                flag = '不好意思,找到了相同的值,不能放入了';
                // 找到了某个值相同后,后面的值就没必要检测了,结束即可
                break;
            }
        }
        // 6 当所有值检测完毕后,判断arr[i]是否可以放入
        //   - 如果flag还是默认值,可以放入
        if (flag === '默认没有一样的值') {
            // 7 将arr[i]放入到result中
            result[result.length] = arr[i];
        }
    }
    console.log(result);
函数
    如果希望代码可以重复使用,并且灵活性强,可以使用函数操作(循环就不行了)
    函数就是一个可以重复使用的代码块
    声明方式
        // 函数声明语句

function 函数名 () {
// 函数体
}

// 函数表达式
var 函数名 = function () {
// 函数体
};
函数的调用
函数的代码如果要执行,需要进行调用操作
格式: 函数名();
函数的基本设置方式:
设置一个函数功能的基本步骤:
先实现具体功能
随便设置一个函数体,将代码放入即可
在需要使用功能的地方调用即可
函数的参数:
参数的使用场景:当一个函数中某些值会发生改变时,可以使用参数
形参:函数体小括号中书写的参数
实参:调用的小括号中
用来给形参赋值,赋值后形参带着值进行函数内代码操作
function getSum (n, m) {
var sum = 0;
for (var i = n; i <= m; i++) {
sum += i;
}
console.log(sum);
}

getSum(1, 100);
getSum(200, 300);
getSum(1, 10);
    函数的返回值
        函数的返回值指的是函数的结果。
        在函数中设置 return 值;
        接收方式:通过函数调用表达式进行接收
        function getSum (n, m) {
        var sum = 0;
        for (var i = n; i <= m; i++) {
            sum += i;
        }
        // console.log(sum);

        // 如果希望在函数外获取函数的计算结果,需要使用返回值
        //  - 格式:  return 值;
        return sum;
    }

    // 希望在函数外对本次调用的结果进行其他操作
    // getSum(1, 100);
    // console.log(sum);
    // 函数内的变量无法在函数外操作,出现了报错:
    // Uncaught ReferenceError: sum is not defined 没有sum,没法用

    // 接收返回值的方式:通过函数的 调用表达式。
    console.log( getSum(1, 100) ); // 5050
    var result = getSum(1, 100);
    console.log( result ); // 5050 
        函数返回值的默认值:undefined
        return的第二个作用:结束函数执行
            可以单独使用
作用域
    作用域指的是js中标识符(变量名、函数名)的生效范围。
    全局作用域:
        只要不在函数内,都称为全局作用域。
    局部作用域
        任意函数内都称为局部作用域
    全局变量和函数
        全局作用域中声明的变量和函数称为全局变量和全局函数
        访问范围:在任意位置均可访问
    局部变量和函数
        局部作用域中声明的变量和函数称为局部变量和局部函数
        访问范围:只能在当前作用域内部访问(无法被外部作用域访问)
            内部可以访问,内部的内容也可以,内部的内部的。。的内部也可以

JavaScript基础(四)

标签:声明   去重   出现   应该   reference   全局   函数表达式   标识   get   

原文地址:https://www.cnblogs.com/itxcr/p/11600138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!