js函数了解

函数

函数概念: 把一段可以重复执行的代码封装起来

函数的作用:减少冗余代码

函数的声明(定义): 语法:

function 函数名(){

函数体

}

函数的调用:函数名()

函数名的命名规则:

1. 大小字母,下划线,美元符号,数字都可以用

2. 数字不能开头

3. 不能用关键字和保留字

4. 变量名建议用名词定义,函数名建议用动词定义

5. 函数名尽量不用下划线拼接多个单词,而是用小驼峰命名法

预解析:

js中存在预解析-特征是所谓的变量声明,函数声明提升,将声明过程提升到了当前作用域最前面

// 第1题
      console.log(num);
      var num = 100;
        undefined
      // 第2题
      fn();
      function fn() {
        console.log(123);
      }
      123
      // 这里无法调用,因为目前这里的fn1是undefined
      //fn1();   // 类型错误   fn1 is not a function
      // 函数表达式-赋值式函数
      var fn1 = function () {
        console.log("Naruto!");
      };
      // 这里可以执行
      fn1()

预解析总结:

1. 匿名函数赋值给变量的定义方式,预解析时遵循变量的预解析规则,不会将函数代码预解析

2. 预解析的时候,会将定义提前放在内存中,不会提前将赋值放在内存中

3. 如果变量名和函数名同名了,保留函数预解析,忽略变量预解析

因为函数预解析其实包含了赋值的过程,函数定义放在内存中的时候将函数的代码也放在内存中

变量的预解析只有空间,没有值,所以如果是先预解析变量,那后面的函数预解析赋值就将空间中放入了值,

如果是先预解析的函数,再次预解析变量的时候,空间已经存在了,再次定义空间也是没有意义的。

4. 省略var定义的变量是不会有预解析的

5. js代码如果报错了,那后面的代码就不会执行了

6. 不会执行的代码中有变量或函数定义也会预解析,因为预解析在执行之前。

匿名函数:

当将一个函数赋值给一个变量的时候,这个函数的名字就没有用了,所以我们可以将这个函数名称省略:

语法:

var f = function(){

console.log(12)

}

调用:f()

匿名函数 小括号包裹,后面加小括号调用。

语法2:

(function(a,b){

var c = a + b;

document.write(c);

})(1,2);

自执行函数:

可以在自执行函数前面加 分号 ; 感叹号!波浪线 ~ 也可以用小括号()把函数包裹起来

语法:

;(function(){
      var str=''
      console.log('自执行函数2');
    })()

局部变量:在js中,在ES6以前,只有在函数中声明的变量才是局部变量;

全局变量:其他场景中声明的变量都是全局变量

函数的参数

函数为什么要有参数?

进一步提升函数的可复用性

函数参数分为两个部分 实参 和 形参

1. 函数声明过程中 传递参数--形(式)参(数)

function 函数名(形参1,形参2...){函数体}

2. 函数调用过程中 传递参数--实(际)参(数)

函数名(实参1,实参2...)

形参与实参个数不一样的情况:

实参个数小于形参个数,那么没有赋值的形参 值是undefined

实参个数大于形参个数,那么多余的实参没有形参接收 不影响

形参与全局变量同名,在我们的函数内部,到底是在使用全局变量还是在使用形参?

在函数内部可以使用全局变量

但是如果全局变量和函数内部局部变量同名,我们优先使用函数内部的局部变量

知识拓展:

arguments 可以获取到实参的值,形成一个伪数组;

console.log(arguments) 由实参组成的伪数组对象;

函数返回值:

1. 在函数中可以使用return关键字,让函数存在返回值

return ;

2. 直接用函数调用代码 给变量赋值,那么在该变量中就接收了函数的返回值(函数的执行结果)

var res = 函数名(); console.log(res);

3. 如果函数本身没有return,我们又使用变量去接收函数返回值,会得到undefined

4. return后面的代码不会执行,相当于提前结束函数

5. 有return,但是return后面没有值,那么返回值还是undefined

6. return和值要写在同一行

7.return会终止代码继续运行

8. 函数运行后返回一个结果,只能返回一个

封装函数:判断一个数是不是水仙花数    有参数,有返回值
        function isNarcissisticNumber(num) {
          if (num < 100 || num > 999) {
              console.log("请输入正确的三位数");
             return ;
          }
          var a = parseInt(num / 100);
          var b = parseInt((num / 10) % 10);
          var c = num % 10;
          if(a**3+b**3+c**3===num){
              return num+'是水仙花数'
          }else{
              return  num+'不是水仙花数'
          }
        }
        var result=isNarcissisticNumber(153);
        console.log(result);
用函数判断一个数字是否是素数  有参数,有返回值
        function getNumberType(num) {
          var flage = true;
          for (var i = 2; i < num / 2; i++) {
            if (num % i === 0) {
              flage = false;
              break;
            }
          }
          if (flage) {
            console.log(num + "是素数");
          } else {
            console.log(num + "是合数");
          }
        }
        var result = getNumberType(15);
            //分别获取4位数的 千位  百位  十位  个位 
            var a = parseInt(num / 1000);
            var b = parseInt(num / 100 % 10);
            var c = parseInt((num / 10) % 10);
            var d = num % 10;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值