前端技能提升(11) 之 什么是函数柯里化及使用场景 + JS单线程和多线程

本文深入解析函数柯里化的概念及其应用场景,同时探讨JavaScript的单线程运行机制,解释其如何处理异步操作,揭示JS与浏览器多线程间的互动模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导航

在这里插入图片描述

1、什么是函数柯里化及使用场景

函数柯里化就是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

太权威了。

来一个简单的demo

// 普通的add函数
function add(x, y) {
    return x + y
}

// Currying后
function curryingAdd(x) {
    return function (y) {
        return x + y
    }
}

add(1, 2)           // 3
curryingAdd(1)(2)   // 3

懂了吧。

懂了的话你跟我讲讲,我不会。

2、JS单线程和多线程

单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
单线程就是进程只有一个线程。
多线程就是进程有多个线程。

其实这里Javascript的单线程运行机制和上面单线程定义是一个执行流程,它只有一个主线任务,且只能按照主线上的代码一步一步执行。

那么问题来了,它既然是单线程,为什么还能执行一些异步操作呢?难道js是个双标狗?

因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中。javascript引擎是单线程处理它的任务队列,你可以理解成就是普通函数和回调函数构成的队列。当异步事件发生时,如mouse click, a timer firing, or an XMLHttpRequest completing(鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调触发等),将他们放入执行队列,等待当前代码执行完成。

又是一场串子看不懂的,大概就是js是单线程的,但是浏览器是可以进行多线程的,js触发事件,事件就会被放入执行队列中,然后单线程读取队列执行事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值