如何(意外地)使用coffeescript写入全局上下文(命名空间)?

时间:2013-08-06 03:03:59

标签: namespaces coffeescript global

我偶然发现了以下实际修改全局命名空间的代码: 我虽然这不可能?

以下代码将三个变量写入全局命名空间(try it):

this.my_global1=1
@my_global2=2
f= -> @my_global3=3
f()

如果你现在用cofeescript试试页

替换上面的代码
alert("#{[my_global1,my_global2,my_global3]}")

您将看到

的提醒
1,2,3

这意味着上述语句修改了全局上下文!

我花了很多时间才弄清楚我的代码出了什么问题,因为我认为coffeescript会保护我免受全球环境的意外变化!

1 个答案:

答案 0 :(得分:2)

CoffeeScript不能阻止你这样做,但JavaScript可以。使用严格模式:

do ->
  "use strict"

  this.$ = 3

在非严格模式下,如果在调用函数时未指定this,则window默认为this。在严格模式下,undefined变为TypeError: Cannot set property '$' of undefined ,如果您尝试为其指定属性,则会引发错误:

{{1}}