我意外地偶然發現了下面的代碼,它實際上修改了全局命名空間: 雖然這不可能嗎?如何(意外)用coffeescript寫入全局上下文(命名空間)?
下面的代碼將三個變量到全局命名空間(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會保護我形成全球環境的意外變化!
'this'是'window',所以代碼是做你告訴它做什麼。 – Blender
的確如此,但代碼不清楚 –
CoffeeScript無法知道每個範圍內的「this」是什麼。這超出了該語言的範圍。 – Blender