1 创建函数

1-1 直接量的方式

  1. function go(a){
  2. console.log(a)
  3. }

1-2 变量声明的方式

  1. var go = function(a){
  2. console.log(a)
  3. }

1-3 构造函数

  1. var go = new Function('a','b','alert(a*b)');
  2. go(2,3);

2 函数返回值

  1. # 什么是函数的返回值
  2. 定义:函数的执行结果
  3. 函数可以没有return
  4. 说明:
  5. 1.函数会在执行完return语句之后停止,并立即退出
  6. 2.return语句也可以不带任何返回值,用于提前停止函数执行
  7. function show(){
  8. return "hello world" //return的作用:把结果返回到函数外部
  9. }
  10. var b = show(); // 在哪调用返回到哪里;

函数return之后,return后面的语句就不会执行了
作用:将函数内部的值返回外部

  1. function go(){
  2. return "hello world";
  3. console.log("good"); // 不会执行
  4. }
  5. console.log(go()); // hello world

3 函数的参数

  1. 可变参(不定参)arguments
  2. 参数的个数可变,参数数组
  3. //对传入的参数求和
  4. function total(){
  5. let result = 0;
  6. for(let i=0;i<arguments.length;i++){
  7. result+=arguments[i];
  8. }
  9. return result;
  10. }
  11. var a = total(2,3,3);
  12. console.log(a);

3-1 重载

重载:就是根据参数的不同,动态决定调用哪个方法
js中没有重载的概念,因为重复声明,下面的会覆盖上面的

  1. //js中没有重载的概念,因为重复声明,下面的会覆盖上面的
  2. function go(a){
  3. console.log(a);
  4. }
  5. function go(a,b){
  6. console.log(a+b);
  7. }

使用arguments对象模拟重载

  1. function go(){
  2. if(arguments.length==1){
  3. console.log(arguments[0]);
  4. }else if(arguments.length==2){
  5. console.log(arguments[0]+arguments[1]);
  6. }
  7. }
  8. go(1)
  9. go(10,20)

4 函数作为对象的方法

  1. var obj = {
  2. name:"zheng",
  3. sayName(){
  4. console.log(this.name);
  5. },
  6. sayAge:()=>{
  7. console.log(18);
  8. },
  9. saySkill:function(){
  10. console.log("javascript");
  11. }
  12. }

5 回调函数

  1. 回调函数 就是这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。
  2. 这个过程就叫做回调。
  3. 场景:一般在异步调用中使用
  4. 作用:
  5. 1.将函数内部的值返回到外部
  6. 2.取代了return语句
  1. var show = function(res){
  2. console.log(res);
  3. }
  4. function go(callback){
  5. var a = 10;
  6. callback(a)
  7. }
  8. go(show)
  9. /* go(function(res){
  10. console.log(res);
  11. })
  12. callback = function(res){
  13. console.log(res)
  14. }
  15. */

6 函数的调用流程

  1. 1、函数调用的时候会生成一个容器,去放置局部变量
  2. 2、形参如果没有赋值,默认值为undefined;
  3. 3、如果形参和函数名,基于函数优先级别高。形参的值为函数
  1. var test = function(num){
  2. console.log(num);
  3. var num =20;
  4. function num(){
  5. console.log("hello world")
  6. }
  7. console.log(num)
  8. }
  9. test(10);

解析

  1. 1、函数调用的时候num =10
  2. 2、基于声明提前 num= function(){
  3. console.log("hello world")
  4. }
  5. 所以第一段输出function
  6. 3、执行到num =20 覆盖
  7. 所以之后输出20