局部变量在应用 function.call() 后变为全局变量
Local variable becomes global after applying function.call()
对不起标题,我对size
变量的想法令人困惑:
size = undefined
methods = () ->
this.size = (_) ->
size = _
this
lines = () ->
size = 10 # default value
x = () -> size
methods.call(x)
x
circles = () ->
size = 15 # default value
x = () -> size
methods.call(x)
x
root.test = {
lines : lines
circles : circles
}
我编写上面的代码是为了只定义一次size()
方法,然后将其添加到lines()
和circles()
函数中。在控制台上它似乎可以工作
> test.lines()() #10
> test.lines().size(20)() #20
> test.circles()() #15
> test.circles().size(30)() #30
在应用size()
方法后调用 lines()
和 circles()
函数时,会出现此问题,如下所示
> var l = test.lines().size(20)
> var r = test.circles().size(30)
> l() # 30
在最后一行,l()
返回30
但我希望20
.size()
方法能够更改出现在 x = () -> size
中的size
变量的值,并且它还更改其范围,我错了吗?
换句话说,您能否帮助我更改上面的代码,以便拥有
> var l = test.lines().size(20)
> var r = test.circles().size(30)
> l() # 20
并将size()
方法定义保留在lines
和circles
函数之外?
请注意,test.lines()
应该是一个函数,而不是一个对象。
好吧,您将大小声明为全局变量,因此对象共享相同的大小。
methods = (initial_size) ->
this._mysize = initial_size
this.size = (new_size) ->
if new_size
this._mysize = new_size
this._mysize
return
l = new methods(10)
r = new methods(30)
console.log(l.size())
console.log(r.size())
l 是一个方法对象,这意味着它有自己的_mysize。r也是如此。当调用 l.size(( 时,它会调用 size 函数,并将其作为 l。如果定义了new_size参数,则会更改 mysize。在任何情况下,都会返回 mysize。
CoffeeScript 还提供了 class 关键字,这将帮助您使这段代码更清晰。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 局部变量在应用 function.call() 后变为全局变量
- 由全局范围内的 Web 应用程序声明的全局变量
- 全局变量 VS Web 应用中的本地存储和内存问题
- 如何将数据存储在全局变量中以在应用程序中访问它
- 在大型骨干应用程序中使用全局变量
- 我应该使用Javascript或PHP设置一个全局变量来唯一标识web应用程序中的每个页面吗
- 从Extjs MVC应用程序中获取全局变量
- 通用React应用中的全局变量,Node抛出ReferenceError
- SailsJS应用中用于单元测试的全局变量
- 如何在Angular2中触发一个应用范围的事件或者观察一个全局变量?
- 如何在windows 8商店应用中设置Javascript/HTML5的全局变量
- Javascript全局变量只能在应用程序运行后访问