-1

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

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

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

如果您现在在 cofeescript 尝试页面中将上述代码替换为

alert("#{[my_global1,my_global2,my_global3]}")

你会看到一个警报

1,2,3

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

我花了好几个小时才弄清楚我的代码出了什么问题,因为我认为咖啡脚本可以保护我免受全球环境的意外变化!

4

1 回答 1

2

CoffeeScript 无法阻止您这样做,但 JavaScript 可以。使用严格模式:

do ->
  "use strict"

  this.$ = 3

在非严格模式下,如果在调用函数时未指定,则this默认为。window在严格模式下,thisbecome undefined,如果您尝试为其分配属性,它将引发错误:

TypeError: Cannot set property '$' of undefined
于 2013-08-06T03:24:43.577 回答