函数的认识

1. 函数

1.1 函数概念

  • 函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的 重复使用。
// 不用函数1~10的累加和
var sum = 0;
 for (var i = 1; i <=10; i++) { 
 sum += i; 
 }
 console.log(sum);
 //使用函数 
 //函数就是封装了一段可以被重复执行调用的代码块 目的: 就是让大量代码重复使用 
function getSum(num1, num2) { 
 var sum = 0;
  for (var i = num1; i <= num2; i++) {
   sum += i; }
   console.log(sum); }
   getSum(1, 5); 
   getSum(1, 10);

1.2 函数的声明

声明函数 
function 函数名() {
 函数体代码
  }
  • function 是声明函数的关键字,必须小写
  • 由于函数一般是为了实现某个功能才定义的, 所以通常我们将函数名命名为动词,函数名:驼峰命名法 动词;比如 getSum

1.3 函数的调用

调用函数 函数名(); 
通过调用函数名来执行函数体代码
  • 调用的时候千万不要忘记添加小括号
  • 口诀:函数不调用,自己不执行
  • 注意:声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码。

定义函数的两种方式区别:

  1. 函数声明式,调用的时候可以放在函数定义的上面或者下面
      printSjx();
      function printSjx() {
      document.write('<table>')
       for (var i = 1; i <= 9; i++) {
          document.write('<tr>')
               for (var j = 1; j <= i; j++) {
                      document.write('<td>'+i+'*'+j+'='+i*j+'</td>')
                   document.write(`<td>${i}*${j}=${i * j}</td>`)
                }
                document.write('</tr>');
             }
             document.write('</table>')
         }
  1. 表达式声明法:调用时只能写在函数定义的下面,放在上面会报错
         printSanJiaoXing();
         var printSanJiaoXing = function(){
             document.write('<table>')
             for (var i = 1; i <= 9; i++) {
                 document.write('<tr>')
                 for (var j = 1; j <= i; j++) {
                      document.write('<td>'+i+'*'+j+'='+i*j+'</td>')
                     document.write(`<td>${i}*${j}=${i * j}</td>`)
                 }
                 document.write('</tr>');
             }
            document.write('</table>')
         }

1.4 函数的参数

  • 函数参数语法
    形参:函数定义时设置接收调用时传入
    实参:函数调用时传入小括号内的真实数据

参数的作用 : 在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。

函数参数的运用
1.调用的时候实参值是传递给形参的
2.形参简单理解为:不用声明的变量
3.实参和形参的多个参数之间用逗号(,)分隔

  • 函数形参和实参数量不匹配时
    1.形参和实参个数相同时,参数赋值会一一对应
    2.形参个数>实参个数: 没有给赋值的形参,值为undefined
    3.实参的数>形参个数:可以通过arguments来获取传入的实参
    小结:
    1.函数可以带参数也可以不带参数
    2.声明函数的时候,函数名括号里面的是形参,形参的默认值为 undefined
    3.调用函数的时候,函数名括号里面的是实参
    4.多个参数中间用逗号分隔
    5.形参的个数可以和实参个数不匹配,但是结果不可预计,我们尽量要匹配

1.6 函数的返回值

  • return 语句
    返回值:函数调用整体代表的数据;函数执行完成后可以通过return语句将指定数据返回 。
    我想把的到的这个和,存起来,下次还能用
    return 只能返回一个值

  • 比如:

    function getSum(x,y){
    return x+y;
    }

    通过return 关键字返回出来的结果,函数调用时,结果就可以被保存起来
    

    var sum = getSum(10,23);//把结果保存在sum变量中
    带return的函数,函数调用的结果是一个值,可以直接输出,也可以存到变量中
    console.log(sum);
    function getA(){
    return ‘zs’
    }
    函数如果带return了,函数调用的结果是 一个值,可以直接输出,也可以保存到变量里
    console.log(getA());
    var x = getA()
    console.log(x);

1.7 arguments的使用

  • 当不确定有多少个参数传递的时候,可以用 arguments 来获取。
    每一个函数内部都会有一个叫arguments:它会记录你传递过去的所有实参
    arguments: [2, 3, 6, 4, 5]
    arguments[0] arguments[1] arguments[2] arguments[3] arguments[4]
    length:长度(个数)
    arguments.length:传入实参的个数
    arguments[aruments.length-1]: 传入参数的最后一号元素

2.1作用域

  • 作用域:代码的作用范围,一段代码起作用的区域

     全局作用域: 在函数外面定义的变量
     全局位置定义的变量称为全局变量, 会保存在一个叫window对象里面
     全局变量的生命周期:页面一打开变量就起作用了,页面已关闭,变量就起作用了
    
  1. 全局作用域里面定义的变量,哪哪都能访问
       var n = 20;
      console.log(n);//20
       function fn() {
       console.log(n);
     }
      fn();//20
     console.log(n);//20
  1. 局部作用域定义的变量,只能在函数作用域内部使用,外部访问不到

    局部变量的声明周期:函数调用时产生,函数调用结束消失
    
function fn(){
         var n = 10;
        }
        fn();
        console.log(n);//n is not defined
  1. js中 不是所有的{}都用于作用域 像 if(){} for(){} while(){}不能形成作用域

       if (true) {
           var n = 20;
       }
       console.log(n);//20

       for(var i=1 ;i<=10;i++){      }
       console.log(i); //  11

2.2 变量的赋值和访问规则

变量的访问(获取)规则:

  1. 局部位置访问变量时,就近原则:先找局部作用域下的变量,找到就不找了,如果局部作用域里面没有,向上找,直到全局都没有,就报错
var x = 10;
       function fn(){
          var x = 20;
          console.log(x); //20
       }
       fn();


       var x = 10;
       function fn(){
          console.log(x);//10
       }
       fn();


       function fn(){
          console.log(x); // x is not defined
       }
       fn();
  1. 变量的赋值(获取)规则: 遵循就近赋值
 var x = 10;;
        function fn() {
            var x = 20; //初始值
            x = 30;  //重新赋值
            console.log(x); // 30
        }
        fn();

        console.log(x); // 10
  1. 赋值也好,访问也好,先找局部,再找全局

        var x = 10;; //初始值
        function fn() {
            x = 30;  // 先找一找 函数内部有没有定义局部变量x,  向上找,找了一个叫x的变量   , 全局位置的x已经被重新赋值了  x = 30;
            console.log(x);  //30
        }
        fn();
        console.log(x);   //30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值