记录分享学习内容

网络应用 加入时间:2024-04-27 10:59:38 浏览
记录分享学习内容

关于www.dreamapplehappy.com说明: www.dreamapplehappy.com由网友主动性提交被尊龙凯时公司官网 - 尊龙凯时(中国)官方网站整理收录的,尊龙凯时公司官网 - 尊龙凯时(中国)官方网站仅提供www.dreamapplehappy.com的基础信息并免费向大众网友展示,www.dreamapplehappy.com的是IP地址:180.111.196.17 [中国江苏南京 电信],www.dreamapplehappy.com的百度权重为0、百度手机权重为0、百度收录为0条、360收录为0条、搜狗收录为0条、谷歌收录为0条、百度来访流量大约在-之间、百度手机端来访流量大约在-之间、www.dreamapplehappy.com的备案号是浙ICP备15041054号、备案人叫罗鹏展、被百度收录的关键词有0个、手机端关键词有0个、迄今为止已经创建5年5月17天。

记录分享学习内容的站点协议: 协议类型HTTP/1.1 200 OK 页面类型text/html 服务器类型tencent-cos 是否压缩否 原网页大小128695 压缩后大小14073 压缩比89.06%

记录分享学习内容的站点快照: 记 录 分 享 学 习 内 容 记 录 分 享 学 习 内 容 H o m e A r c h i v e s  2 0 1 9 1 2 2 4 掌 握 J a v a S c r i p t 函 数 的 柯 里 化 原 文 链 接 H a s k e l l 和 s c a l a 都 支 持 函 数 的 柯 里 化 , J a v a S c r i p t 函 数 的 柯 里 化 还 与 J a v a S c r i p t 的 函 数 编 程 有 很 大 的 联 系 , 如 果 你 感 兴 趣 的 话 , 可 以 在 这 些 方 面 多 下 功 夫 了 解 , 相 信 收 获 一 定 很 多 . 看 本 篇 文 章 需 要 知 道 的 一 些 知 识 点 函 数 部 分 的 c a l l / a p p l y / a r g u m e n t s 闭 包 高 阶 函 数 不 完 全 函 数 文 章 后 面 有 对 这 些 知 识 的 简 单 解 释 , 大 家 可 以 看 看 . 什 么 是 柯 里 化 ? 我 们 先 来 看 看 维 基 百 科 中 是 如 何 定 义 的 : 在 计 算 机 科 学 中 , 柯 里 化 ( 英 语 : C u r r y i n g ) , 又 译 为 卡 瑞 化 或 加 里 化 , 是 把 接 受 多 个 参 数 的 函 数 变 换 成 接 受 一 个 单 一 参 数 ( 最 初 函 数 的 第 一 个 参 数 ) 的 函 数 , 并 且 返 回 接 受 余 下 的 参 数 而 且 返 回 结 果 的 新 函 数 的 技 术 。 我 们 可 以 举 个 简 单 的 例 子 , 如 下 函 数 a d d 是 一 般 的 一 个 函 数 , 就 是 将 传 进 来 的 参 数 a 和 b 相 加 ; 函 数 c u r r y i n g A d d 就 是 对 函 数 a d d 进 行 柯 里 化 的 函 数 ; 这 样 一 来 , 原 来 我 们 需 要 直 接 传 进 去 两 个 参 数 来 进 行 运 算 的 函 数 , 现 在 需 要 分 别 传 入 参 数 a 和 b , 函 数 如 下 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 f u n c t i o n a d d ( a , b ) f u n c t i o n c u r r y i n g A d d ( a ) } a d d ( 1 , 2 ) ; / / 3 c u r r y i n g A d d ( 1 ) ( 2 ) ; / / 3 看 到 这 里 你 可 能 会 想 , 这 样 做 有 什 么 用 ? 为 什 么 要 这 样 做 ? 这 样 做 能 够 给 我 们 的 应 用 带 来 什 么 样 的 好 处 ? 先 别 着 急 , 我 们 接 着 往 下 看 . 为 什 么 要 对 函 数 进 行 柯 里 化 ? 可 以 使 用 一 些 小 技 巧 ( 见 下 文 ) 提 前 绑 定 好 函 数 里 面 的 某 些 参 数 , 达 到 参 数 复 用 的 效 果 , 提 高 了 适 用 性 . 固 定 易 变 因 素 延 迟 计 算 总 之 , 函 数 的 柯 里 化 能 够 让 你 重 新 组 合 你 的 应 用 , 把 你 的 复 杂 功 能 拆 分 成 一 个 一 个 的 小 部 分 , 每 一 个 小 的 部 分 都 是 简 单 的 , 便 于 理 解 的 , 而 且 是 容 易 测 试 的 ; 如 何 对 函 数 进 行 柯 里 化 ? 在 这 一 部 分 里 , 我 们 由 浅 入 深 的 一 步 步 来 告 诉 大 家 如 何 对 一 个 多 参 数 的 函 数 进 行 柯 里 化 . 其 中 用 到 的 知 识 有 闭 包 , 高 阶 函 数 , 不 完 全 函 数 等 等 . I 开 胃 菜 假 如 我 们 要 实 现 一 个 功 能 , 就 是 输 出 语 句 n a m e 喜 欢 s o n g , 其 中 n a m e 和 s o n g 都 是 可 变 参 数 ; 那 么 一 般 情 况 下 我 们 会 这 样 写 : 1 2 3 4 5 f u n c t i o n p r i n t I n f o ( n a m e , s o n g ) p r i n t I n f o ( T o m , 七 里 香 ) ; p r i n t I n f o ( J e r r y , 雅 俗 共 赏 ) ; 对 上 面 的 函 数 进 行 柯 里 化 之 后 , 我 们 可 以 这 样 写 : 1 2 3 4 5 6 7 8 9 f u n c t i o n c u r r y i n g P r i n t I n f o ( n a m e ) } v a r t o m L i k e = c u r r y i n g P r i n t I n f o ( T o m ) ; t o m L i k e ( 七 里 香 ) ; v a r j e r r y L i k e = c u r r y i n g P r i n t I n f o ( J e r r y ) ; j e r r y L i k e ( 雅 俗 共 赏 ) ; I I 小 鸡 炖 蘑 菇 上 面 我 们 虽 然 对 对 函 数 p r i n t I n f o 进 行 了 柯 里 化 , 但 是 我 们 可 不 想 在 需 要 柯 里 化 的 时 候 , 都 像 上 面 那 样 不 断 地 进 行 函 数 的 嵌 套 , 那 简 直 是 噩 梦 ; 所 以 我 们 要 创 造 一 些 帮 助 其 它 函 数 进 行 柯 里 化 的 函 数 , 我 们 暂 且 叫 它 为 c u r r y i n g H e l p e r 吧 , 一 个 简 单 的 c u r r y i n g H e l p e r 函 数 如 下 所 示 : 1 2 3 4 5 6 7 8 f u n c t i o n c u r r y i n g H e l p e r ( f n ) } 这 里 解 释 一 点 东 西 , 首 先 函 数 的 a r g u m e n t s 表 示 的 是 传 递 到 函 数 中 的 参 数 对 象 , 它 不 是 一 个 数 组 , 它 是 一 个 类 数 组 对 象 ; 所 以 我 们 可 以 使 用 函 数 的 A r r a y . p r o t o t y p e . s l i c e 方 法 , 然 后 使 用 . c a l l 方 法 来 获 取 a r g u m e n t s 里 面 的 内 容 . 我 们 使 用 f n . a p p l y ( t h i s , _ t o t a l A r g s ) 来 给 函 数 f n 传 递 正 确 的 参 数 . 接 下 来 我 们 来 写 一 个 简 单 的 函 数 验 证 上 面 的 辅 助 柯 里 化 函 数 的 正 确 性 , 代 码 部 分 如 下 : 1 2 3 4 5 6 7 8 9 f u n c t i o n s h o w M s g ( n a m e , a g e , f r u i t ) v a r c u r r y i n g S h o w M s g 1 = c u r r y i n g H e l p e r ( s h o w M s g , d r e a m a p p l e ) ; c u r r y i n g S h o w M s g 1 ( 2 2 , a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e v a r c u r r y i n g S h o w M s g 2 = c u r r y i n g H e l p e r ( s h o w M s g , d r e a m a p p l e , 2 0 ) ; c u r r y i n g S h o w M s g 2 ( w a t e r m e l o n ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 0 y e a r s o l d , a n d I l i k e e a t w a t e r m e l o n 上 面 的 结 果 表 示 , 我 们 的 这 个 柯 里 化 的 函 数 是 正 确 的 . 上 面 的 c u r r y i n g H e l p e r 就 是 一 个 高 阶 函 数 , 关 于 高 阶 函 数 的 解 释 可 以 参 照 下 文 . I I I 牛 肉 火 锅 上 面 的 柯 里 化 帮 助 函 数 确 实 已 经 能 够 达 到 我 们 的 一 般 性 需 求 了 , 但 是 它 还 不 够 好 , 我 们 希 望 那 些 经 过 柯 里 化 后 的 函 数 可 以 每 次 只 传 递 进 去 一 个 参 数 , 然 后 可 以 进 行 多 次 参 数 的 传 递 , 那 么 应 该 怎 么 办 呢 ? 我 们 可 以 再 花 费 一 些 脑 筋 , 写 出 一 个 b e t t e r C u r r y i n g H e l p e r 函 数 , 实 现 我 们 上 面 说 的 那 些 功 能 . 代 码 如 下 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 f u n c t i o n b e t t e r C u r r y i n g H e l p e r ( f n , l e n ) e l s e } ; } 其 中 c u r r y i n g H e l p e r 就 是 上 面 I I 小 鸡 炖 蘑 菇 中 提 及 的 那 个 函 数 . 需 要 注 意 的 是 f n . l e n g t h 表 示 的 是 这 个 函 数 的 参 数 长 度 . 接 下 来 我 们 来 检 验 一 下 这 个 函 数 的 正 确 性 : 1 2 3 4 5 v a r b e t t e r S h o w M s g = b e t t e r C u r r y i n g H e l p e r ( s h o w M s g ) ; b e t t e r S h o w M s g ( d r e a m a p p l e , 2 2 , a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e b e t t e r S h o w M s g ( d r e a m a p p l e , 2 2 ) ( a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e b e t t e r S h o w M s g ( d r e a m a p p l e ) ( 2 2 , a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e b e t t e r S h o w M s g ( d r e a m a p p l e ) ( 2 2 ) ( a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e 其 中 s h o w M s g 就 是 I I 小 鸡 炖 蘑 菇 部 分 提 及 的 那 个 函 数 . 我 们 可 以 看 出 来 , 这 个 b e t t e r C u r r y i n g H e l p e r 确 实 实 现 了 我 们 想 要 的 那 个 功 能 . 并 且 我 们 也 可 以 像 使 用 原 来 的 那 个 函 数 一 样 使 用 柯 里 化 后 的 函 数 . I V 泡 椒 凤 爪 我 们 已 经 能 够 写 出 很 好 的 柯 里 化 辅 助 函 数 了 , 但 是 这 还 不 算 是 最 刺 激 的 , 如 果 我 们 在 传 递 参 数 的 时 候 可 以 不 按 照 顺 来 那 一 定 很 酷 ; 当 然 我 们 也 可 以 写 出 这 样 的 函 数 来 , 这 个 c r a z y C u r r y i n g H e l p e r 函 数 如 下 所 示 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 v a r _ = ; f u n c t i o n c r a z y C u r r y i n g H e l p e r ( f n , l e n g t h , a r g s , h o l e s ) e l s e i f ( a r g = = = _ ) e l s e i f ( h o l e L e n g t h ) e l s e } / / 判 断 是 否 所 有 的 参 数 都 已 满 足 a l l A r g u m e n t s S p e c i f i e d = ( _ a r g s . l e n g t h > = l e n g t h ) ; i f ( a l l A r g u m e n t s S p e c i f i e d ) / / 递 归 的 进 行 柯 里 化 r e t u r n c r a z y C u r r y i n g H e l p e r . c a l l ( t h i s , f n , l e n g t h , _ a r g s , _ h o l e s ) ; } ; } 一 些 解 释 , 我 们 使 用 _ 来 表 示 参 数 中 的 那 些 缺 失 的 参 数 , 如 果 你 使 用 了 l o d a s h 的 话 , 会 有 冲 突 的 ; 那 么 你 可 以 使 用 别 的 符 号 替 代 . 按 照 一 贯 的 尿 性 , 我 们 还 是 要 验 证 一 下 这 个 c r a z y C u r r y i n g H e l p e r 是 不 是 实 现 了 我 们 所 说 的 哪 些 功 能 , 代 码 如 下 : 1 2 3 4 5 6 v a r c r a z y S h o w M s g = c r a z y C u r r y i n g H e l p e r ( s h o w M s g ) ; c r a z y S h o w M s g ( _ , 2 2 ) ( d r e a m a p p l e ) ( a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e c r a z y S h o w M s g ( _ , 2 2 , a p p l e ) ( d r e a m a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e c r a z y S h o w M s g ( _ , 2 2 , _ ) ( d r e a m a p p l e , _ , a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e c r a z y S h o w M s g ( d r e a m a p p l e , _ , _ ) ( 2 2 ) ( a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e c r a z y S h o w M s g ( d r e a m a p p l e ) ( 2 2 ) ( a p p l e ) ; / / M y n a m e i s d r e a m a p p l e , I m 2 2 y e a r s o l d , a n d I l i k e e a t a p p l e 结 果 显 示 , 我 们 这 个 函 数 也 实 现 了 我 们 所 说 的 那 些 功 能 . 柯 里 化 的 一 些 应 用 场 景 说 了 那 么 多 , 其 实 这 部 分 才 是 最 重 要 的 部 分 ; 学 习 某 个 知 识 要 一 定 可 以 用 得 到 , 不 然 学 习 它 干 嘛 . 关 于 函 数 柯 里 化 的 一 些 小 技 巧 给 s e t T i m e o u t 传 递 地 进 来 的 函 数 添 加 参 数 一 般 情 况 下 , 我 们 如 果 想 给 一 个 s e t T i m e o u t 传 递 进 来 的 函 数 添 加 参 数 的 话 , 一 般 会 使 用 之 种 方 法 : 1 2 3 4 5 6 7 f u n c t i o n h e l l o ( n a m e ) s e t T i m e o u t ( h e l l o ( d r e a m a p p l e ) , 3 6 0 0 ) ; / / 立 即 执 行 , 不 会 在 3 . 6 s 后 执 行 s e t T i m e o u t ( f u n c t i o n ( ) , 3 6 0 0 ) ; / / 3 . 6 s 后 执 行 我 们 使 用 了 一 个 新 的 匿 名 函 数 包 裹 我 们 要 执 行 的 函 数 , 然 后 在 函 数 体 里 面 给 那 个 函 数 传 递 参 数 值 . 当 然 , 在 E S 5 里 面 , 我 们 也 可 以 使 用 函 数 的 b i n d 方 法 , 如 下 所 示 : 1 s e t T i m e o u t ( h e l l o . b i n d ( t h i s , d r e a m a p p l e ) , 3 6 0 0 ) ; / / 3 . 6 s 之 后 执 行 函 数 这 样 也 是 非 常 的 方 便 快 捷 , 并 且 可 以 绑 定 函 数 执 行 的 上 下 文 . 我 们 本 篇 文 章 是 讨 论 函 数 的 柯 里 化 , 当 然 我 们 这 里 也 可 以 使 用 函 数 的 柯 里 化 来 达 到 这 个 效 果 : 1 s e t T i m e o u t ( c u r r y i n g H e l p e r ( h e l l o , d r e a m a p p l e ) , 3 6 0 0 ) ; / / 其 中 c u r r y i n g H e l p e r 是 上 面 已 经 提 及 过 的 这 样 也 是 可 以 的 , 是 不 是 很 酷 . 其 实 函 数 的 b i n d 方 法 也 是 使 用 函 数 的 柯 里 化 来 完 成 的 , 详 情 可 以 看 这 里 F u n c t i o n . p r o t o t y p e . b i n d ( ) . 写 出 这 样 一 个 函 数 m u l t i p l y ( 1 ) ( 2 ) ( 3 ) = = 6 结 果 为 t r u e , m u l t i p l y ( 1 ) ( 2 ) ( 3 ) ( . . . ) ( n ) = = ( 1 ) * ( 2 ) * ( 3 ) * ( . . . ) * ( n ) 结 果 为 t r u e 这 个 题 目 不 知 道 大 家 碰 到 过 没 有 , 不 过 通 过 函 数 的 柯 里 化 , 也 是 有 办 法 解 决 的 , 看 下 面 的 代 码 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 f u n c t i o n m u l t i p l y ( x ) ; y . t o S t r i n g = y . v a l u e O f = f u n c t i o n ( ) ; r e t u r n y ; } c o n s o l e . l o g ( m u l t i p l y ( 1 ) ( 2 ) ( 3 ) = = 6 ) ; / / t r u e c o n s o l e . l o g ( m u l t i p l y ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) = = 1 2 0 ) ; / / t r u e 因 为 m u l t i p l y ( 1 ) ( 2 ) ( 3 ) 的 直 接 结 果 并 不 是 6 , 而 是 一 个 函 数 对 象 , 我 们 之 后 使 用 了 = = 会 将 左 边 这 个 函 数 对 象 转 换 成 为 一 个 数 字 , 所 以 就 达 到 了 我 们 想 要 的 结 果 . 还 有 关 于 为 什 么 使 用 t o S t r i n g 和 v a l u e O f 方 法 可 以 看 看 这 里 的 解 释 N u m b e r . p r o t o t y p e . v a l u e O f ( ) , F u n c t i o n . p r o t o t y p e . t o S t r i n g ( ) . 上 面 的 那 个 函 数 不 够 纯 粹 , 我 们 也 可 以 实 现 一 个 更 纯 粹 的 函 数 , 但 是 可 以 会 不 太 符 合 题 目 的 要 求 . 我 们 可 以 这 样 做 , 先 把 函 数 的 参 数 存 储 , 然 后 再 对 这 些 参 数 做 处 理 , 一 旦 有 了 这 个 思 路 , 我 们 就 不 难 写 出 些 面 的 代 码 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 f u n c t i o n a d d ( ) r e t u r n r e s u l t ; } e l s e } } a d d ( 1 ) ( 2 ) ( 3 ) ( ) ; / / 6 a d d ( 1 , 2 , 3 ) ( ) ; / / 6 当 我 们 的 需 要 兼 容 I E 9 之 前 版 本 的 I E 浏 览 器 的 话 , 我 们 可 能 需 要 写 出 一 些 兼 容 的 方 案 , 比 如 事 件 监 听 ; 一 般 情 况 下 我 们 应 该 会 这 样 写 : 1 2 3 4 5 6 7 8 v a r a d d E v e n t = f u n c t i o n ( e l , t y p e , f n , c a p t u r e ) e l s e } ; 这 也 写 也 是 可 以 的 , 但 是 性 能 上 会 差 一 点 , 因 为 如 果 是 在 低 版 本 的 I E 浏 览 器 上 每 一 次 都 会 运 行 i f ( ) 语 句 , 产 生 了 不 必 要 的 性 能 开 销 . 我 们 也 可 以 这 样 写 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 v a r a d d E v e n t = ( f u n c t i o n ( ) } e l s e } } ) ( ) ; 这 样 就 减 少 了 不 必 要 的 开 支 , 整 个 函 数 运 行 一 次 就 可 以 了 . 延 迟 计 算 上 面 的 那 两 个 函 数 m u l t i p l y ( ) 和 a d d ( ) 实 际 上 就 是 延 迟 计 算 的 例 子 . 提 前 绑 定 好 函 数 里 面 的 某 些 参 数 , 达 到 参 数 复 用 的 效 果 , 提 高 了 适 用 性 . 我 们 的 I 开 胃 菜 部 分 的 t o m L i k e 和 j e r r y L i k e 其 实 就 是 属 于 这 种 的 , 绑 定 好 函 数 里 面 的 第 一 个 参 数 , 然 后 后 面 根 据 情 况 分 别 使 用 不 同 的 函 数 . 固 定 易 变 因 素 我 们 经 常 使 用 的 函 数 的 b i n d 方 法 就 是 一 个 固 定 易 变 因 素 的 很 好 的 例 子 . 关 于 柯 里 化 的 性 能 当 然 , 使 用 柯 里 化 意 味 着 有 一 些 额 外 的 开 销 ; 这 些 开 销 一 般 涉 及 到 这 些 方 面 , 首 先 是 关 于 函 数 参 数 的 调 用 , 操 作 a r g u m e n t s 对 象 通 常 会 比 操 作 命 名 的 参 数 要 慢 一 点 ; 还 有 , 在 一 些 老 的 版 本 的 浏 览 器 中 a r g u m e n t s . l e n g t h 的 实 现 是 很 慢 的 ; 直 接 调 用 函 数 f n 要 比 使 用 f n . a p p l y ( ) 或 者 f n . c a l l ( ) 要 快 一 点 ; 产 生 大 量 的 嵌 套 作 用 域 还 有 闭 包 会 带 来 一 些 性 能 还 有 速 度 的 降 低 . 但 是 , 大 多 数 的 w e b 应 用 的 性 能 瓶 颈 时 发 生 在 操 作 D O M 上 的 , 所 以 上 面 的 那 些 开 销 比 起 D O M 操 作 的 开 销 还 是 比 较 小 的 . 关 于 本 章 一 些 知 识 点 的 解 释 琐 碎 的 知 识 点 f n . l e n g t h : 表 示 的 是 这 个 函 数 中 参 数 的 个 数 . a r g u m e n t s . c a l l e e : 指 向 的 是 当 前 运 行 的 函 数 . c a l l e e 是 a r g u m e n t s 对 象 的 属 性 。 在 该 函 数 的 函 数 体 内 , 它 可 以 指 向 当 前 正 在 执 行 的 函 数 . 当 函 数 是 匿 名 函 数 时 , 这 是 很 有 用 的 , 比 如 没 有 名 字 的 函 数 表 达 式 ( 也 被 叫 做 ” 匿 名 函 数 ” ) . 详 细 解 释 可 以 看 这 里 a r g u m e n t s . c a l l e e . 我 们 可 以 看 一 下 下 面 的 例 子 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 f u n c t i o n h e l l o ( ) } } h e l l o ( ) ( 1 ) ; / / h e l l o / * * h e l l o * f r o m a a n o n y m o u s f u n c t i o n . * h e l l o * f r o m a a n o n y m o u s f u n c t i o n . * / h e l l o ( ) ( ) ( ) ; f n . c a l l e r : 返 回 调 用 指 定 函 数 的 函 数 . 详 细 的 解 释 可 以 看 这 里 F u n c t i o n . c a l l e r , 下 面 是 示 例 代 码 : 1 2 3 4 5 6 7 8 9 1 0 f u n c t i o n h e l l o ( ) f u n c t i o n c a l l H e l l o ( f n ) c a l l H e l l o ( h e l l o ) ; / / h e l l o [ F u n c t i o n : c a l l H e l l o ] 高 阶 函 数 ( h i g h o r d e r f u n c t i o n ) 高 阶 函 数 就 是 操 作 函 数 的 函 数 , 它 接 受 一 个 或 多 个 函 数 作 为 参 数 , 并 返 回 一 个 新 的 函 数 . 我 们 来 看 一 个 例 子 , 来 帮 助 我 们 理 解 这 个 概 念 . 就 举 一 个 我 们 高 中 经 常 遇 到 的 场 景 , 如 下 : 1 2 3 f 1 ( x , y ) = x + y ; f 2 ( x ) = x * x ; f 3 = f 2 ( f 3 ( x , y ) ) ; 我 们 来 实 现 f 3 函 数 , 看 看 应 该 如 何 实 现 , 具 体 的 代 码 如 下 所 示 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 f u n c t i o n f 1 ( x , y ) f u n c t i o n f 2 ( x ) f u n c t i o n f u n c 3 ( f u n c 1 , f u n c 2 ) } v a r f 3 = f u n c 3 ( f 1 , f 2 ) ; c o n s o l e . l o g ( f 3 ( 2 , 3 ) ) ; / / 2 5 我 们 通 过 函 数 f u n c 3 将 函 数 f 1 , f 2 结 合 到 了 一 起 , 然 后 返 回 了 一 个 新 的 函 数 f 3 ; 这 个 函 数 就 是 我 们 期 望 的 那 个 函 数 . 不 完 全 函 数 ( p a r t i a l f u n c t i o n ) 什 么 是 不 完 全 函 数 呢 ? 所 谓 的 不 完 全 函 数 和 我 们 上 面 所 说 的 柯 里 化 基 本 差 不 多 ; 所 谓 的 不 完 全 函 数 , 就 是 给 你 想 要 运 行 的 那 个 函 数 绑 定 一 个 固 定 的 参 数 值 ; 然 后 后 面 的 运 行 或 者 说 传 递 参 数 都 是 在 前 面 的 基 础 上 进 行 运 行 的 . 看 下 面 的 例 子 : 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 / / 一 个 将 函 数 的 a r g u m e n t s 对 象 变 成 一 个 数 组 的 方 法 f u n c t i o n a r r a y ( a , n ) / / 我 们 要 运 行 的 函 数 f u n c t i o n s h o w M s g ( a , b , c ) f u n c t i o n p a r t i a l L e f t ( f ) } f u n c t i o n p a r t i a l R i g h t ( f ) } f u n c t i o n p a r t i a l ( f ) } a = a . c o n c a t ( a r r a y ( a r g u m e n t s , j ) ) ; c o n s o l e . l o g ( a ) ; / / 打 印 实 际 传 递 到 函 数 中 的 参 数 列 表 r e t u r n f . a p p l y ( t h i s , a ) ; } } p a r t i a l L e f t ( s h o w M s g , 1 ) ( 2 , 3 ) ; / / 实 际 参 数 列 表 : [ 1 , 2 , 3 ] 所 以 结 果 是 1 * ( 2 3 ) = 1 p a r t i a l R i g h t ( s h o w M s g , 1 ) ( 2 , 3 ) ; / / 实 际 参 数 列 表 : [ 2 , 3 , 1 ] 所 以 结 果 是 2 * ( 3 1 ) = 4 p a r t i a l ( s h o w M s g , u n d e f i n e d , 1 ) ( 2 , 3 ) ; / / 实 际 参 数 列 表 : [ 2 , 1 , 3 ] 所 以 结 果 是 2 * ( 1 3 ) = 4 一 些 你 可 能 会 喜 欢 的 J S 库 J a v a S c r i p t 的 柯 里 化 与 J a v a S c r i p t 的 函 数 式 编 程 密 不 可 分 , 下 面 列 举 了 一 些 关 于 J a v a S c r i p t 函 数 式 编 程 的 库 , 大 家 可 以 看 一 下 : u n d e r s c o r e l o d a s h r a m d a b a c o n . j s f n . j s f u n c t i o n a l j s 欢 迎 提 意 见 可 以 在 这 里 提 意 见 参 考 的 资 料 G e t t i n ’ F r e a k y F u n c t i o n a l w / C u r r i e d J a v a S c r i p t A B e g i n n e r ’ s G u i d e t o C u r r y i n g i n F u n c t i o n a l J a v a S c r i p t C u r r y i n g , S p i c e U p Y o u r J a v a s c r i p t F u n c t i o n s C u r r i e d J a v a S c r i p t f u n c t i o n s T i d y i n g U p a J a v a S c r i p t A p p l i c a t i o n w i t h H i g h e r O r d e r F u n c t i o n s C u r r y i n g F u n c t i o n s i n J a v a s c r i p t J a v a S c r i p t 中 的 函 数 式 编 程 实 践 函 数 式 J a v a S c r i p t ( 4 ) : 函 数 柯 里 化 前 端 开 发 者 进 阶 之 函 数 柯 里 化 C u r r y i n g J S 中 的 柯 里 化 ( c u r r y i n g ) 浅 析 J a v a S c r i p t 中 的 函 数 c u r r y i n g 柯 里 化 J s 函 数 柯 里 化 深 入 解 析 J a v a S c r i p t 中 函 数 的 C u r r y i n g 柯 里 化 j s 基 础 篇 之 — — J a v a S c r i p t 的 柯 里 化 函 数 详 解 J S 函 数 柯 里 化 及 其 应 用 J S 闭 包 与 柯 里 化 J a v a S c r i p t 函 数 柯 里 化 详 解 J a v a s c r i p t c u r r y w h a t a r e t h e p r a c t i c a l a p p l i c a t i o n s ? C u r r y i n g a n d P a r t i a l F u n c t i o n s i n J a v a S c r i p t W h a t i s ‘ C u r r y i n g ’ ? S h a r e A r c h i v e s D e c e m b e r 2 0 1 9 R e c e n t P o s t s 掌 握 J a v a S c r i p t 函 数 的 柯 里 化 © 2 0 2 3 d r e a m a p p l e | P o w e r e d b y H e x o 浙 I C P 备 1 5 0 4 1 0 5 4 号 3 H o m e A r c h i v e s

该网址导航信息声明此内容系本站根据来路自动抓取的结果,不代表本站赞成被显示网站的内容或立场。

相关推荐