在coffeescript中声明和屏蔽模块变量
coffeescript中所有变量默认为局部变量,也就是说任何函数内部的非闭包变量赋值都将在函数头部产生该变量的var声明。非闭包变量指的是:该变量没有在包裹该函数的外部函数和模块中声明过。
因此,如果想避免在函数内部的var声明,使变量赋值具有模块级的效果,可以在模块头部增加对该变量的赋值,这样该变量将只在模块头部,而不再在函数头部产生var声明。
如果在函数内部希望屏蔽外部的声明怎么办?借助回引号标记法产生原始js代码。
示例:
x = 0
f = () ->
`var x` #如无此行,下一赋值直接修改外部的x
x = 1
f()
console.log x #如果没有`var x`则显示0,否则显示1.