function abc() {
var a = 1;
var func = function() {
var a = 2;
}
func();
alert(a);
}
注意var
,在代码段中,a
的结果将为1,但如果省略var
,结果将为2,但我发现咖啡无法转化为此。
例如以下内容:
abc = ->
a = 1
func = ->
a = 2
return
func()
alert(a)
return
答案 0 :(得分:5)
答案 1 :(得分:4)
您可以使用反引号来执行普通的js。
abc = ->
a = 1
func = ->
`var a = 2`
return
func()
alert(a)
return
编译表格
var abc;
abc = function() {
var a, func;
a = 1;
func = function() {
var a = 2;
};
func();
alert(a);
};
答案 2 :(得分:2)
CoffeeScript,根据设计,不允许您隐藏先前声明的变量。然而,有一种情况仍然存在:
abc = ->
a = 1
func = (a) ->
a = 2
return
func()
alert(a)
return
这将导致1
。因为a
是函数参数,所以它是函数作用域的本地函数。
abc = ->
a = 1
do (a) -> a = 2
alert a
return
其中do (a) -> a = 2
相当于((a) -> a = 2)()
。
答案 3 :(得分:1)
好吧,如果你这样做:
abc = ->
a = 1
func = ->
b = 2
alert(b)
return
func()
alert(a)
return
你得到:
var abc;
abc = function() {
var a, func;
a = 1;
func = function() {
var b;
b = 2;
alert(b);
};
func();
alert(a);
};
所以只是不要在第二个方法范围内使用相同的变量名,你就可以了。
答案 4 :(得分:0)
以下代码怎么样?
abc = ->
a = 1
func = ->
@a = 2
return
func()
alert(a)
return
我同意:这不是严格相同的代码,但行为符合预期......
你的问题只是一种风格构成,还是你有“现实世界”的问题?