javascript Function函数理解与实战

JavaScript Function 函数理解与实战

1. 概述

函数是 JavaScript 中的重要概念之一。它是一块代码,用于完成特定的任务。函数通常有一个名称,可以提高代码的重用率,使代码更易于维护。在 JavaScript 中,函数也是第一类对象,也就是说,它们可以作为参数传递,返回值以及保存到变量中。

2. 基本语法

2.1 函数声明

函数通常有以下组成部分:

  • 函数名称:用于引用函数
  • 参数列表:用于传递值
  • 函数体:具体实现逻辑

函数声明语法如下:

function functionName(param1, param2, ..., paramN) {
  // 函数体
  return returnValue;
}

其中 param1, param2, ..., paramN 是函数参数,returnValue 是函数返回值。如果函数没有返回值,可以省略 return 语句。

2.2 函数表达式

函数表达式与函数声明非常相似,其语法如下:

var functionName = function (param1, param2, ..., paramN) {
  // 函数体
  return returnValue;
}

与函数声明不同,函数表达式可以将函数赋值给变量。这使得函数可以方便地作为参数传递,返回值,或被其他函数调用。同时,也可以将函数赋值给一个对象的属性,从而创建对象的方法。

3. 函数参数

JavaScript 函数可以使用零个或多个参数。声明函数时指定每个参数的名称和数量。当调用函数时,传递的参数的数量必须匹配函数声明时指定的数量。如果传递的参数数量不够,参数的值将被设置为 undefined;如果传递的参数数量多于声明时指定的数量,则会被忽略。

3.1 默认参数

ES6 以前,函数不能直接定义默认参数。但我们仍然可以通过函数体内的逻辑判断来实现:

function functionName(param1, param2) {
  param1 = param1 || defaultValue1;
  param2 = param2 || defaultValue2;
  // 函数体
  return returnValue;
}

ES6 引入了默认参数的概念,提供了一种更简洁的方式去声明默认参数。示例如下:

function functionName(param1 = defaultValue1, param2 = defaultValue2) {
  // 函数体
  return returnValue;
}

3.2 剩余参数

有时函数需要处理数量不定的参数,这时候可以使用剩余参数语法。剩余参数允许我们将任意数量的参数表示为一个数组,示例代码如下:

function functionName(param1, param2, ...otherParams) {
  console.log(otherParams); // [ 'value3', 'value4' ]
  // 函数体
  return returnValue;
}

functionName('value1', 'value2', 'value3', 'value4');

4. 函数作用域

在 JavaScript 中,有两种主要类型的作用域:全局作用域和本地作用域。全局作用域是整个脚本环境,而本地作用域是由函数定义的范围。

4.1 全局作用域

如果变量在函数以外定义,那么它就在全局作用域中,可以在脚本的任何地方访问它。例如:

var globalVar = 'value';

function foo() {
  console.log(globalVar); // 'value'
}

foo();

4.2 本地作用域

变量在函数内定义,就是本地变量。本地变量只能在函数内访问,不能在函数外部访问。例如:

function foo() {
  var localVar = 'value';
  console.log(localVar);
}

foo(); // 'value'
console.log(localVar); // ReferenceError: localVar is not defined

5. 闭包

闭包是一个非常强大的特性,可以用来模拟私有变量、创建工厂函数。闭包返回的函数可以访问和持有闭包函数中被引用变量的状态,同时不会受外部环境的影响。

例如:

function outerFunction(name) {
  var greeting = 'Hello';

  function innerFunction() {
    console.log(greeting + ' ' + name);
  }

  return innerFunction;
}

var sayHelloToBob = outerFunction('Bob');
sayHelloToBob(); // 'Hello Bob'

上述示例代码中,outerFunction 返回了一个函数 innerFunction,并持有对闭包变量 greeting 的引用。innerFunction 可以访问在 outerFunction 中定义的变量并输出 "Hello Bob"。

6. 示例

6.1 阶乘函数

以下代码使用递归实现阶乘函数:

function factorial(n) {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

console.log(factorial(5)); // 120

6.2 数组去重函数

以下代码使用 Set 实现数组去重:

function unique(arr) {
  return Array.from(new Set(arr));
}

console.log(unique([1, 2, 3, 3, 4, 5, 5])); // [ 1, 2, 3, 4, 5 ]

7. 总结

函数是 JavaScript 中重要的概念之一。函数可以让我们编写模块化、可组合和可重用的代码。在使用时,需要注意函数声明、函数表达式、函数参数、作用域、闭包等概念。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript Function函数理解与实战 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript 事件处理程序介绍

    JavaScript 事件处理程序介绍 在 JavaScript 中,事件处理程序是处理在页面中发生的事件的功能代码。当用户在页面上进行操作时,比如单击一个按钮或是按下一个键盘按键,这些事件将被浏览器捕获,然后触发相应的事件处理程序。 事件处理程序的绑定方式 1. HTML事件处理程序 在HTML标签中直接在属性中绑定事件处理程序。 <button o…

    JavaScript 2023年5月28日
    00
  • 你必须了解的JavaScript中的属性描述对象详解(下)

    让我来详细讲解一下“你必须了解的JavaScript中的属性描述对象详解(下)”中的内容。 引言 在 JavaScript 中,所有的属性都是以属性描述对象的形式存在的。属性描述对象是一个包含属性元数据的对象,可以控制属性的行为。在 上一篇攻略 中,我已经介绍了属性描述对象的基础知识,接下来我将继续介绍更加深入和实用的知识。 属性描述对象的属性 config…

    JavaScript 2023年5月27日
    00
  • 学习js所必须要知道的一些

    学习JavaScript所必须要知道的一些攻略 简介 学习JavaScript(以下简称JS)时,需要一些基础知识,其中包括语法、DOM操作、Ajax、闭包等等。下面将详细介绍学习JS的一些必备知识。 1. 语法 1.1 数据类型 JS包含7种不同的数据类型,分为原始类型和对象类型。原始类型包括: 数字(Number):整数或浮点数 字符串(String):…

    JavaScript 2023年5月28日
    00
  • js实例之01支付后的10秒倒计时

    这是一个通过js实现的支付后的页面,点击支付会跳出一个弹窗,提示你是否要确定支付,确定后进入付后界面,该页面有着10秒倒计时,计时结束后便会返回原界面。也可以选择立刻返回,来返回主页面第一个zhifu.html页面<!DOCTYPE html> <html lang=”en”> <head> <meta charse…

    JavaScript 2023年4月18日
    00
  • assert()函数用法总结(推荐)

    当我们编写程序时,为了保证程序的正常运行,需要对程序中的各个部分进行测试和验证。而assert()函数就是一个非常常用的测试和验证工具。 assert()函数介绍 assert()函数是C语言头文件中的一种调试工具,包含于库中。其作用是,如果传入的参数为0(即假),则表达式为false,会触发assert()函数,程序将会停止运行。assert()函数用于检…

    JavaScript 2023年6月10日
    00
  • JavaScript RegExp 对象用法详解

    JavaScript RegExp 对象用法详解 JavaScript 的正则表达式 (RegExp) 提供了一种强大的文本匹配能力,可以极大地简化对字符串的操作。在本篇文章中,我们将详细介绍 JavaScript RegExp 对象的用法,包括创建 RegExp 对象、访问 RegExp 对象属性、使用 RegExp 对象方法等。 创建 RegExp 对象…

    JavaScript 2023年6月10日
    00
  • javascript实现的HashMap类代码

    JavaScript实现的HashMap类代码 HashMap是一种非常常用的数据结构,用于提高键值对查找的效率。JavaScript作为一门弱类型语言,没有原生的HashMap,但我们可以用Object对象来实现一个简单的HashMap类。 实现细节 使用Object对象存储键值对,遍历时需要注意使用hasOwnProperty方法判断是否为对象本身的属性…

    JavaScript 2023年6月11日
    00
  • JavaScript在for循环中绑定事件解决事件参数不同的情况

    JavaScript 在 for 循环中绑定事件时,通常会遇到事件参数不同的情况,这种情况下,如果不加以处理,则会导致事件回调出错或者引起内存泄漏等问题。解决该问题的方法是通过使用闭包和立即执行函数表达式,来给事件参数绑定上恰当的值。下面是具体的攻略: 1. 通过立即执行函数表达式给事件参数绑定上值 通过立即执行函数表达式可以在每次迭代时创建一个新的作用域,…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部