1.7JavaScript语言的函数(Function)

1.函数声明

每次调用函数都会返回 Function 类型的实例。

//函数声明定义方式
function 函数名称(值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
  //函数体
}
//函数表达式定义方式

//命名函数
let Rectangle = function Rectangle2(值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
  //函数体
};
console.log(Rectangle.name);
//输出函数名称: "Rectangle2"

//未命名/匿名函数
let Rectangle = function (值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
  //函数体
};
console.log(Rectangle.name);
//输出函数名称: "Rectangle"

2.函数分类

2.1全局函数

名称修饰符
全局函数——————

2.2成员方法

名称修饰符
静态方法static 修饰
实例方法static 修饰

2.2局部函数

名称修饰符
嵌套函数——————

3.参数分类

名称修饰符
值参数——————
默认值参数——————
…剩余参数...

4.参数传递方式

JavaScript函数的参数在内部表现为一个数组,函数被调用时总会接收一个数组。

函数调用时传递的实参个数与函数定义时接收的形参个数无需相同。

函数调用时传递的实参类型与函数定义时默认值参数的类型无需相同。

参数的传递只支持按位置参数从左往右依次传递方式,不支持按命名参数传递方式。

实参的传递只支持按值传递方式(传递的是副本),不支持按引用传递方式(传递的是内存地址)。

参数类型参数传递方式描述
值类型按值传递对方法内的局部变量的修改不会反应到方法外。
引用类型按值传递对方法内的局部变量的修改会反应到方法外,新对象存储在新内存地址。

5.返回方式

按值返回。

6.函数作为值

函数不仅可以作为参数传递给另外一个函数,或者 还可以在函数中返回作为返回值的另一个函数。

只要满足其一,我们就可以将这种编程风格称为高阶函数风格(Higher Order Function Style),函数A称为高阶函数(Higher Order Function),函数B称为回调函数(Callback Function)。

//作为参数的函数只需要函数名称,不需要包含括号()
function 函数名称A (函数名称B) {
  //函数体
}
function 函数名称A () {
  return 函数名称B() {
    //返回值函数体
  };
}

7.箭头(Arrow)函数

零参数或多个参数需要使用括号 () 。只有一个参数时可省略括号 ()

函数体为多个语句时需要使用花括号 {},单个表达式时可省略花括号 {}

let 变量名称 = (值参数名称, 默认值参数名称 = 值, ...剩余参数名称) => { 
  //函数体
};

8.立即调用的函数表达式

IIFE(Immediately Invokable Function Expressions)是在函数声明后立即调用的函数表达式,通常用于当函数只使用一次时。

(function() {
  //函数体
})();

9.递归

一个函数可以指向并调用自身,便形成了递归。

function loop(x) {
  if (x >= 10) // "x >= 10" 是退出条件(等同于 "!(x < 10)")
    return;
  // 做些什么
  loop(x + 1); // 递归调用
}
loop(0);

10.闭包(Closure)

闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。

但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。

此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数的生存周期将比内部函数执行时间长。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。

let pet = function(name) {          //外部函数定义了一个变量"name"
  let getName = function() {            
    //内部函数可以访问外部函数定义的"name"
    return name; 
  }
  //返回这个内部函数,从而将其暴露在外部函数作用域
  return getName;               
};
myPet = pet("Vivie");
    
myPet();

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/4731.html

(0)
上一篇 2020年8月6日 20:07
下一篇 2020年8月8日 02:22

相关推荐

  • 1.5JavaScript语言的变量(Variable)

    1.变量声明 2.变量分类 2.1全局变量 名称 修饰符 全局变量 —————— 2.2成员变量 字段声明时,不需要添加 let 或 const 关键字。 名称 修饰符 静态字段 用 static 修饰 实例字段 —————— 2.3局部变量 名称 修饰符 局部变量 —————— 值参数 —————— 默认值参数 ——…

  • 1.1JavaScript语言的注释(Comment)

    1.单行注释 2.多行注释 3.Hashbang注释 Hashbang注释用于当脚本直接在 shell 中运行时以指定 JavaScript 解释器的路径,但如果直接在 JavaScript 解释器中运行时,它会被视为普通注释。 Hashbang注释只能单行且一个文件只能有一个Hashbang注释。

  • 2.1JavaScript语言的ES6 Module

    每个文件本身都是模块,在文件中定义的类、变量、常量和函数对这个文件而言都是私有(private)的,除非它们被显式导出。另外,一个模块导出的值只有在显式导入它们的模块中才可以使用。 虽然模块中可同时存在命名导出和默认导出,但作为最佳实践只使用命名导出和默认导出中的一种。 当使用场景为需要导出多个值的时候,只使用命名导出…

发表回复

登录后才能评论