Sam*_*ong 6 ruby scope coffeescript
我试图了解CoffeeScript变量的范围.根据文件:
这种行为实际上与Ruby的局部变量范围相同.
但是,我发现它的工作方式不同.
在CoffeeScript中
a = 1
changeValue = -> a = 3
changeValue()
console.log "a: #{a}" #This displays 3
Run Code Online (Sandbox Code Playgroud)
在Ruby中
a = 1
def f
a = 3
end
puts a #This displays 1
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
Ruby的局部变量(以[a-z_]开头)实际上是声明它们的块的本地变量.所以你发布的Ruby行为是正常的.
在你的Coffee示例中,你有一个引用a 的闭包.这不是一个功能声明.
在Ruby示例中,您没有闭包而是函数声明.这是不同的.与您的咖啡相当的Ruby是:
a = 1
changeValue = lambda do
a = 3
end
changeValue()
Run Code Online (Sandbox Code Playgroud)
在闭包中,当块被执行时,仍然可以访问声明块时出现的局部变量.这是封闭的力量之一!
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |