JavaScript:函数

任务

  1. 最大公约数 最小公倍数 重点

  2. 质数

    1. 双重循环 重点

  3. 作业

  4. 函数的返回值 超级重点

  5. 函数的默认参数 重点

  6. 函数的预解析 必须掌握

    1. 从函数定义到函数执行中间经历了什么

    2. 函数在定义阶段 和调用阶段 经历了什么 面试中 要非常自然的表达出来

  7. 作用域 重点

  8. 递归 熟练使用

    1. 函数自己调用自己

最大公约数 最小公倍数

greatest common divisor GCD 最大公约数

least common multiple LCM 最小公倍数

12 
​
1 2 3 4 6 12  就叫做12的约数  
​
8 
1 2 4 8    8的约数 
​
​
公约数  12  8 共同的约数 
 
1  2   4  => 12 8 共同的约数  
4 最大  所以 4 是最大公约数  
​
​
规律:
两个数的公约数 有个范围 
最小是1  最大是  两个数中最小的那个数  
​
​
​
​
最小公倍数  
​
12   
​
12  24 36 48 60 72 ...... => 12的倍数  
​
​
18 
​
18 36  54 72     => 18的倍数  
​
公倍数  
​
能整除12 也能整除18的数 就叫公倍数  
​
36  72    => 36 就叫最小公倍数  
​
规律:
最小公倍数 也有范围 
​
12  18   18 ~ 12 * 18 
​
范围最小值  两个数中的最大值   范围最大值   两个数的乘积
​
​
​
用代码去实现找到最大公约数  
1. 我们需要让代码不断的去尝试找到这个最大公约数  不断尝试 用到循环  
2. 循环需要知道它重复做的事情是什么  
    设最大公约数是x 
    第一个数 % x ==0  && 第二个数 % x == 0 
    
3. 循环是需要条件 需要范围
    1到 (第一个数和第二个数中的最小值)
​
4. 最后我们只要 一个值  
    准备一个容器  => 一个变量只能存一个值  留在最后的就是我们想要的 
    
    最大公约数 
    
    1. 从小到大 留在最后的就是我们想要的 
    2. 从大到校  第一个放进去的就是我们想要的
        只要有一个满足放到容器中 循环可以停止了  
         break 
         
​
12   8 
​
[1    8] => 在这个范围找最大公约数 
​
12 % 1 == 0   8 % 1 == 0   1 => 容器
12 % 2 == 0   8 % 2 == 0   2 => 容器
12 % 4 == 0   8 % 4 == 0   4 => 容器 
​
最后容器中是4 所以 4就是最大公约数 
var num1 = 12;
var num2 = 8;
var min = num1<num2?num1:num2;
var res = 1; # 因为1是任何数字的约数 暂且把1放到容器中
for(var x=1;x<=min;x++){
    if(num1 % x ==0 && num2 % x== 0){
            res = x;
    }
}
// 循环结束 看一下容器中是多少 这个就是我们想要的结果
console.log(res);
​
​
思路2:
    1. 不断的去尝试 找两个数的最大公约数  循环 
    2.  循环重复做的事情是什么?
        设置 最大公约数是x 
        第一个数 % x ==0 && 第二个数 % x ==0 
        x 就是两个数的公约数 
        
        最后是需要拿到一个值 
        准备一个容器 容器只能存放一个值  
        思路一 约数从小到大放,最后一个就是我们想要的 
        思路二 是我们想要的 第一个放进来就要结束循环  
    3. 循环要有初始值 范围 
        初始值 : 1 
        最大公约数的范围 1~两个数中的最小值 
    var num1 = 12;
    var num2 = 18;
    var min = num1<num2?num1:num2;
    var res = 1;
    for(var x = min;x>=1;x--){
        if(num1 % x ==0 && num1 % x == 0){
             res = x;
             break;
        }
    }
    
    console.log(res); 
        
思路三:
    欧几里得定律  辗转相除法 
    
    规律 :
        1.需要不断的尝试才能找到结果  循环
        2. 每次循环执行的代码   重复做的事情 
            12 % 8 == 4 
            8  % 4 == 0
        3. 循环的条件 
            两个数取余不为0  那么循环就一直进行 
            如果为0 终止 
        var num1 = 12;
        var num2 = 18;
        
        var max = num1>num2?num1:num2;
        var min = num1<num2?num1:num2;
            
        while(max % min !== 0){
             var temp = max % min;
             max = min;
             min = temp;
        }
        
        console.log(min); # 循环结束以后 min就是最后的结果 
    
    
    最小公倍数  
     
     
     思路一 
     
     var num1 = 12;
     var num2 = 18;
     1. 不断去尝试    用到循环 
     2. 循环重复做的事情 
        设置最小公倍数是x
        x % num1 ==0 && x % num2 == 0
     3. 循环有初始值 和范围 
        初始值  两个数中的最大值
        范围[两个数中的最大值,两个数的乘积]
        
     4. 最后的结果只有一个值 准备一个容器 
        [两个数中的最大值,两个数的乘积] 满足条件挨个往容器中放
        第一个满足条件放进去的就是我们想要的结果 循环也要结束
     var max = num1>num2?num1:num2;
     var res = max;
     for(var x = max;x<=max*min;x++){
         if(x % num1 ==0 & x % num2 ==0){
                res = x;
                break;
         }
     }
     console.log(res); // 循环结束看res中的值是多少 这就是我们想要的结果
     
     思路二:
        公式 : 
            两个数的乘积 = 最小公倍数* 最大公约数
            
     12 18 
     
     最大公约数: 6
     最小公倍数: 36
     
     12 * 18 = 6 * 36 
     
     

返回值

汽车

汽车由很多个零件组成 每个零件都有它自己的作用

比如 中控方向盘 调节方向

车轮 往前走

车身 用到 中控方向盘 条件方向

车身用到车轮向前走

车身是个函数

中控方向盘 是个函数

车轮 是个函数

车身 用到了 中控方向盘函数的结果 用到了车轮的结果

问题? 怎么让车身 用到 中控方向盘和车轮的结果

需要 中控方向盘 把结果返回 车轮把结果返回?

有人问 ?

打印 算不算返回 不算

打印仅仅是吧结果输出到屏幕上 控制台

并没有把结果给到你

function test(){
    alert(结果);
}
​
function test(num1,num2){
    return num1+num2;
}
​
​
test(10,20); // 仅仅是拿到结果 
 
alert(test(10,20)); // 拿到结果 并且将结果弹框  

函数默认参数

函数预解析

在代码执行以前,对代码进行通读并解释

js是弱类型解释型的脚本语言

预解析只解析两个内容

  1. var 声明的变量

    提前进行声明 但是不赋值  相当于 这是准备一个空箱子 但是什么都不放 

    赋值式的函数也按照这个来预解析

  2. 声明式的函数

    对函数名进行声明,并且赋值为一个函数 相当于准备了一个空箱子 并且把函数放进去 
    ​
    赋值式的函数按照 var 的规则进行解析 也是只准备空箱子 但是什么都不放 

注意事项

打开浏览器 只解析全局代码 
不会对函数内的代码 进行预解析  
函数内的代码 会在调用函数的时候 进行预解析 

var 的预解析

var num = 100;
console.log(num);
​
打开浏览器
    var num = 100;
    console.log(num);
预解析:
    1.var num = 100; 这一行需要预解析 声明一个变量起名 叫num 但是不赋值
    2.console.log(num); 这一行不预解析  
​
代码执行:
    1.var num = 100; 将100放到 名字叫num的箱子里 
    2.console.log(num);将100 输出到控制台 
    
    
​
console.log(num);  // num is not defined
var num = 100;
console.log(num); // 100 
​
打开浏览器:
    1.console.log(num); 
    2.var num = 100;
    3.console.log(num); 
    
预解析:
    1.不预解析
    2.预解析 声明一个变量叫num 但是不赋值 
    3.不需要预解析 
​
执行:
    1. console.log(num); 打印num变量中的值 
    // num 在预解析阶段声明了但是没有被赋值 所以会打印undefined 
    2. 将100 放到容器中 
    3. console.log(num); 100 
    
    

声明式的函数

//  fn();
        //  function fn(){
        //     console.log("我是函数");
        //  }
        //  fn();
​
         // 打开浏览器 
         // 1.fn()
         // 2. function fn(){ console.log("我是函数"); }
         // 3. fn();
​
         // 预解析 
         // 1. 不需要
         // 2. 需要 声明一个fn的变量 并且赋值为一个函数 
         // 3. 不需要
​
        // 执行阶段
        // 1. 正常调用 
        // 预解析阶段 已经完成了声明 并且里边是个函数 
        // 2. fn(); 跟上面 一样 正常调用  
​
​
        // 等价于 
        // function fn(){ console.log("我是函数"); }
        // fn();
        // fn();
​
​
       

赋值式函数预解析

 //赋值式的函数 
​
        // fn2();
        // var fn2 = function(){
        //     console.log("我是赋值式的函数");
        // }
        // fn2();
​
        // 打开浏览器
        // 1. fn2();
        // 2. var fn2 = function(){ console.log("我是赋值式的函数"); }
        // 3. fn2();
​
​
        // 预解析 
        // 1. 不需要
        // 2. 需要 声明一个fn2的变量 但是不赋值 
        // 3. 不需要
​
​
        // 执行 
​
        // 1. fn2(); 
        // 预解析阶段 fn2仅仅是 声明了一个变量 但是没有赋值
        // 此时fn2是一个undefined 我们fn2() 加了一个括号
        // 当成函数来调用   结果是 fn2 is not a function 
        // 2. 将一个函数赋值给fn2 fn2此时变成了一个函数
        // 3. fn2(); fn2里边是一个函数 
        /// fn2()当做一个函数来调用
        // 正常调用  

函数内预解析

function fn3(){
            var num = 100;
            console.log(num);
            
        }
        fn3();

        // 预解析
        // 1. 需要 声明一个fn3的变量 并且赋值为一个函数
        // 2. 不需要


        // 执行阶段
        // fn3();
        // 预解析阶段 fn3已经声明了 并且里边是一个函数
        // 当做函数正常调用

            // 开始对函数内的代码进行预解析
            // 1.声明变量 但是不赋值


            // 函数内代码预解析完成 然后执行
            // 1. 把100 赋值给num
            // 2. 打印num

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值