我有一个愚蠢的问题。我得到了这个变量:
var type:int;
和这个功能:
private function test(type:int):void {
}
当我调用该函数并抛出我的变量类型
时test(type);
是否存在编译器混淆的可能性,因为我的变量与函数的参数(type = type)具有相同的名称?我不确定这个话题。通常我会像这样编写函数的参数(如果出现这种情况): 私有函数测试(_type:int):void
只是为了确保名称不完全匹配(我希望你知道我的意思)。
答案 0 :(得分:3)
在你的函数测试中,type将是你传入的int。本地范围将覆盖全局范围。
请考虑以下代码:
var type:int = 5
function test(type:int = 6):int{
return type;
}
trace("type is: "+ type); //type is: 5
trace("inside test: " + test()); //inside test: 6
trace("passing 7: " + test(7)); //passing 7: 7
trace("passing type: " + test(type)); //passing type: 5
type = 10
trace("passing type again: " + test(type)); //passing type again: 10
至于传递一个同名的var,不会这也不会产生任何影响。
答案 1 :(得分:2)
不。
test(type)将始终引用名为type的变量,而不是名为type的参数,因为在函数外部无法访问参数变量。
但是,如果在测试函数中你在那时调用了test(type),它将引用参数变量类型,因为本地范围优先(为了示例,让我们忽略调用这样的测试的事实会导致要无休止地调用的函数。)
如果你确实想在函数中引用你的全局变量,你总是可以使用'this'关键字来检索它。
一些例子:
private var type:int = 4;
private function test(type:int):void{
trace(type,this.type)
}
trace(type);//outputs: 4
test(3);//outputs: 3, 4
test(type);//outputs: 4, 4