我偶然发现了以下实际修改全局命名空间的代码: 我虽然这不可能?
以下代码将三个变量写入全局命名空间(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会保护我免受全球环境的意外变化!
答案 0 :(得分:2)
CoffeeScript不能阻止你这样做,但JavaScript可以。使用严格模式:
do ->
"use strict"
this.$ = 3
在非严格模式下,如果在调用函数时未指定this
,则window
默认为this
。在严格模式下,undefined
变为TypeError: Cannot set property '$' of undefined
,如果您尝试为其指定属性,则会引发错误:
{{1}}