Evan's blog Evan's blog
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)

conanan

真相只有一个
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)
  • 入门

  • 理解

  • 语法

    • 2 语法-1 基础语法
    • 2 语法-1 ES6
    • 2 语法-2 Function
      • 创建
      • 属性
      • 无函数重载 & arguments
      • 默认参数
      • 作用域
      • 箭头函数(匿名函数)
      • 柯里化(curry)
      • 自执行函数
      • 回调函数
    • 3 标准内置对象-1 Object
    • 3 标准内置对象-2 String
    • 3 标准内置对象-3 Array
    • 3 标准内置对象-4 RegExp
    • 3 标准内置对象-5 Number
    • 3 标准内置对象-6 Math
    • 3 标准内置对象-7 Date
    • 3 标准内置对象-8 JSON
    • 3 标准内置对象-9 Set
    • 3 标准内置对象-10 Map
    • 4 面向对象
    • 5 异常
  • 异步

  • 模块化

  • 网络

  • DOM&BOM

  • 常用框架

  • JS
  • 语法
xugaoyi
1984-01-24
目录

2 语法-2 Function

# Function

# 创建

  • Function

    var fun = new Function(形式参数列表,方法体);// 括号里面的都必须是string类型。忘掉吧!
    
    1
  • 函数声明

    function 方法名称(形式参数列表){ 
        方法体
    }
    
    1
    2
    3
  • 函数表达式

    var 方法名 = function(形式参数列表){ //匿名函数
        方法体
    }
    
    1
    2
    3

方法定义时,形参的类型var不用写,返回值类型var也不写。

提示

函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。

函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。

# 属性

length代表形参的个数

# 无函数重载 & arguments

  1. 在JavaScript中,方法的调用只与方法的名称有关,和参数列表无关(传递多少个参数无所谓)

  2. 方法是一个对象,如果定义名称相同的方法,会覆盖(可以从对象引用理解),所以没有函数重载

  3. 在方法声明中有一个隐藏的内置对象(数组)arguments,封装所有的实际参数。同Java中可变参数类似

  4. 可以把传递的参数保存到 arguments数组里面来模拟函数重载

    var add = function(){
        let sum = 0;
        for(let i = 0;i<arguments.length;i++){
            sum+=arguments[i];
        }
        return sum;
    }
    
    1
    2
    3
    4
    5
    6
    7

# 默认参数

function hello(name = "world") {
  console.log(name);
}
hello(); // world
hello(undefined); // world
hello(null); // null
hello("kitty"); // kitty
1
2
3
4
5
6
7

# 作用域

  • 在函数内部定义的变量只能在函数内部使用,ES6之前主要的作用域就是函数,其他查看“作用域和闭包”章节。

  • 函数内部变量与全局变量冲突则会覆盖全局变量

  • let 会在{}中自动生成一个局部作用域,var 没有这个作用

# 箭头函数(匿名函数)

var add = (a, b) => {
  return a + b;
};

var greet = name => {
  console.log("hello", name);
};

var greet2 = name => console.log("hello", name);

console.log(add(1, 2)); // 3
greet("world"); // hello world
greet2("world"); // hello world

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 柯里化(curry)

function add(a, b, c) {
  return a + b + c;
}
console.log(add(1, 2, 3)); // 6

// curry 就是将函数之前的值保存,缓存吗
function addCurry(a) {
  return function(b) {
    return function(c) {
      return a + b + c;
    };
  };
}

var towAdd = addCurry(1)(2);
console.log(towAdd); // f
console.log(towAdd(3)); // 6
console.log(towAdd(4)); // 7
console.log(towAdd(5)); // 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 自执行函数

有自己的作用域

var num1 = 10;
(function() {
  var num1 = 20;
  console.log(num1); // 20
})();
console.log(num1); // 10
1
2
3
4
5
6

# 回调函数

function request(callback) {
  console.log("请求数据");
  callback("success");
  console.log("请求结束");
}

// 可复用
// function callback(msg) {
//   console.log("执行回调函数");
//   console.log("执行结果是:" + msg);
// }

request(msg => {
  console.log("执行回调函数");
  console.log("执行结果是:" + msg);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
上次更新: 2022/03/23, 17:55:39
2 语法-1 ES6
3 标准内置对象-1 Object

← 2 语法-1 ES6 3 标准内置对象-1 Object→

最近更新
01
重点
04-12
02
搭建项目
04-04
03
TS补充
03-30
更多文章>
Theme by Vdoing | Copyright © 2019-2022 conanan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式