首页 > 编程语言 >JavaScript函数调用之多括号调用(精讲)

JavaScript函数调用之多括号调用(精讲)

时间:2024-08-18 19:27:38浏览次数:9  
标签:function 调用 return 函数 精讲 JavaScript 函数调用 链式 fn

目录

fn()()调用形式

fn1().fn2()调用形式也叫链式调用

链式调用的特点

常见用途

(fn()) ()调用形式也叫立即调用函数(IIFE)

关键点:

用途:

示例:


几种多括号调用形式:

  1. fn()()()
  2. fn1().fn2()
  3. (fn()) ()

fn()()调用形式

定义:是一个JavaScript中常见的模式,通常用于函数式编程。它的基本原理是函数返回另一个函数,这样可以实现连续的函数调用。这种模式通常涉及到高阶函数(函数返回函数)和柯里化(currying)。

  • fn():调用函数fn,它返回一个新的函数。
  • fn()():调用fn()返回的函数,它再次返回另一个函数。
  • fn()()():最终调用第二个返回的函数。
function fn(x) {
    return function(y) {
        return function(z) {
            return x + y + z;
        };
    };
}

// 使用 `fn()()()`
const result = fn(1)(2)(3);
console.log(result); // 输出 6

用途和应用: 

1.柯里化(Currying): 柯里化是一种将多个参数的函数转换为一系列单参数函数的技术。上述模式就是柯里化的一种体现。

function add(a) {
    return function(b) {
        return function(c) {
            return a + b + c;
        };
    };
}

const add5 = add(5);
const add5And3 = add5(3);
const result = add5And3(2); // result = 10

 

2.函数式编程: 在函数式编程中,函数返回函数是一种常见的模式。它允许我们将函数组合在一起,以创建复杂的操作。

3.延迟计算和函数链: 这种模式可以用于延迟计算或在多个函数调用之间传递状态。

 扩展例子:

假设我们有一个简单的计数器对象,每个调用都会增加计数:

function createCounter(start) {
    let count = start;
    
    return function() {
        count += 1;
        return function() {
            count += 1;
            return function() {
                return count;
            };
        };
    };
}

// 使用 `createCounter()()()`
const counter = createCounter(0)()()();
console.log(counter); // 输出 3

fn1().fn2()调用形式也叫链式调用

定义:链式调用(method chaining)是指在一个对象的方法调用后直接调用其他方法的一种编程风格。这种技术通常用于简化代码和提高可读性。链式调用的实现依赖于每个方法返回对象本身(this),从而允许多个方法调用链接在一起。

链式调用的特点

  1. 返回当前对象:每个方法在操作完毕后都会返回对象本身(this),使得下一个方法可以被调用。
  2. 方法的顺序:方法的调用顺序很重要,因为每个方法的结果会影响到后续的操作。
  3. 可读性和简洁性:链式调用可以使代码更加简洁和可读,特别是在进行一系列相关操作时。

常见用途

  • 构建器模式(Builder Pattern):用于创建复杂对象,链式调用可以使配置和构建对象的过程更加流畅。
  • DOM 操作:在前端开发中,像 jQuery 这样的库利用链式调用来操作DOM,使得代码更加简洁。
  • 函数式编程:一些函数式编程库(如 Lodash)使用链式调用来处理数据。

class MyClass {
    method1() { /* do something */ return this; }
    method2() { /* do something */ return this; }
}

const obj = new MyClass();
obj.method1().method2(); // 连续调用 method1 和 method2

(fn()) ()调用形式也叫立即调用函数(IIFE)

立即调用函数表达式(IIFE)是一种在定义后立即执行函数的模式。它的基本语法如下:

(function() {
    // 这里是 IIFE 中的代码
    console.log("立即执行函数");
})();

关键点:

  1. 包裹在括号中:函数表达式被包裹在圆括号中,这样JavaScript引擎会将其视为一个表达式,而不是一个函数声明。
  2. 立即调用:函数定义后紧跟着一对圆括号(),立即调用该函数。

用途:

  • 创建局部作用域:IIFE可以创建一个独立的作用域,避免全局作用域污染。
  • 模块化代码:可以将相关的功能封装在一个IIFE中,使得变量不会泄露到全局作用域。

示例:

var result = (function() {
    var privateVar = "I'm private";
    return privateVar;
})();
console.log(result); // 输出 "I'm private"

在这个例子中,privateVar是局部变量,无法从外部访问,而返回值privateVar被赋给了result

标签:function,调用,return,函数,精讲,JavaScript,函数调用,链式,fn
From: https://blog.csdn.net/m0_73890048/article/details/141278574

相关文章

  • 《提升前端性能的 JavaScript 技巧》
    在前端开发中,性能优化是至关重要的一环。JavaScript作为前端开发的核心语言,掌握一些关键的技巧可以显著提升应用的性能。本文将为您介绍一些实用的JavaScript技巧,帮助您优化前端性能。一、避免不必要的计算在代码中,尽量避免在频繁执行的代码块中进行复杂且不必要的计算。......
  • 别再被坑了! JavaScript类型检测的最佳实践
    别再被坑了!JavaScript类型检测的最佳实践在JavaScript中,我们经常需要判断一个变量的类型。这个需求在编程中非常常见,因为不同类型的数据会影响到我们的代码逻辑。JavaScript提供了几种方法来检测数据类型,每种方法都有自己的优缺点。Object.prototype.toString.call()......
  • 方法精讲-言语1笔记
    前:1、听思路、听方法,举一反三是目的。2、挖坑在哪是重点。3、跟上笔记言语理解与表达考情:联考-省一、三大类:1、片段阅读2、语句表达3、逻辑填空二、1、题量40~25不等2、考场上速度,标准题量-5分钟如:40-5=35分3、开始学不要求速度4、文科80%以上的准确率合格5、理......
  • JavaScript判断系统和浏览器
    在做项目的时候,Web端需要适配移动端,且部分参数需要判断对应系统或浏览器。在IOS中,因为高版本的系统Safari浏览器采用了Mac的内核,所以导致普通的判断无法识别到对应系统。(userAgent.match(/(Macintosh)/)&&navigator.maxTouchPoints>=1)能有效识别是apple端,且是触屏的,通过......
  • 0-JavaScript入门
    1.1JS用途JavaScript属于一门脚本语言,可用于前端给网页添加一些动态效果。也可用于node平台,开发服务器React、Vue框架底层也是通过JS实现1.2JS组成前端分为三层层次用途HTML(结构层)利用语义化标签搭建网页CSS(样式层)利用样式进行美化网页、进行网页布局J......
  • 用JavaScript做超级玛丽小游戏
    一、前言前几天用JS实现扫雷和贪吃蛇(通过HTML的DOM节点实现基本界面,界面背景简单,交互简单)。比较复杂的是植物大战僵尸,不同的关卡设置单独的函数。所以还比较难。超级玛丽通过canvas实现背景,交互很复杂,功能很多,JS代码完全是有汇编语言反编译成C语言,然后把C语言转换成JS实现的......
  • TypeScript 之 JavaScript文件类型检查
    启用对JavaScript文件的类型检查在TypeScript编译选项compilerOptions全部配置项中,可以通过以下2个属性配置JavaScriptSupport:allowJs是否允许编译JavaScript文件。默认值是false。在默认情况下,TypeScript编译器只处理.ts、.tsx和.d.ts文件,不会编译.js......
  • JavaScript 中,`'10' < '1'` 的结果为 `false`,原因
    在JavaScript中,'10'<'1'的结果为false,这是因为JavaScript在进行比较操作时,会将字符串按照字符编码进行比较,而不是将它们转换为数字。字符编码比较:字符串'10'的第一个字符是'1',而字符串'1'的第一个字符也是'1'。由于两个字符串的第一个字符相同,所以JavaScript......
  • 使用dotenv保护JavaScript代码中的秘密信息
    把诸如apikey这种秘密信息写死的源代码里不可取,比如通常源代码会通过git仓库等进行管理,这样敏感信息就会被共享了。我们选择使用dotenv库把敏感信息配置在.env文件中,然后把.env文件添加到gitignore文件里,不上传到代码仓库。node程序启动后,会将.env文件里的配置项加载到进程对应......
  • JavaScript实现数组与树结构的相互转换
    1、将树结构数据转换为数组(按照树结构自上而下的顺序转换)树结构:树结构数据样例:代码转换://将树结构数据转换为数组treeNodes为树结构形式的数据functiontreeToArray(treeNodes){letresult=[];//递归函数traverse,用于处理单个节点functiontraverse(node......