gpt4 book ai didi

javascript - 闭包和 CoffeeScript 的范围

转载 作者:行者123 更新时间:2023-11-28 15:26:58 29 4
gpt4 key购买 nike

以下代码定义了两个函数:linescircles,它们返回一个函数 fg分别。函数 fg 相等(() -> size)只是为了简单起见,但通常它们是变量 的不同函数>尺寸

lines = () ->
size = 10 # default value
f = () -> size
f.size = (_) ->
size = _
f
f

circles = () ->
size = 15 # default value
g = () -> size
g.size = (_) ->
size = _
g
g

在控制台上,上面的代码产生以下模式,这正是我需要的:

> lines()() # 10
> lines().size(20)() # 20
> circles()() # 15
> circles().size(30)() #30

正如您可能注意到的,f.sizeg.size 方法是闭包,它们在圆圈。那么我的问题是:如何避免重复 size 方法的代码?(使用 CoffeeScript 或 JavaScript)

我尝试了不同的解决方案,但没有找到正确的方法。为了复制闭包,size 方法内的 size 变量应引用 第一行定义的 size 变量线(对于也是如此)。

最佳答案

您不能在代码中使用辅助函数,因为它无法按预期访问闭包变量。但是,您可以将整个代码包装在一个函数中,以便它分别返回 linescircles 函数:

make = (def, accessor) ->
() ->
size = def
f = () -> accessor size
f.size = (_) ->
size = _
f
f

lines = make 10, (size) -> size
circles = make 15, (size) -> size

关于javascript - 闭包和 CoffeeScript 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670514/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com