
Код:
function foo (a:Number, b:Number) {
return a + b;
}
//// false
//trace (foo ("1", "1"));
//// true
//a = "1";
//b = "1";
//trace (foo (a, b));
//// false
//var a:Number = "1";
//var b:Number = "1";
//trace (foo (a, b));
Три примера. По очереди расскомментарьте каждый и посмотрите реакцию флеша. true - когда флеш не ругается. false когда ругается.
Почему в первом примере у нас ошибка, а во втором нет?
Потому, что в первом мы отдаем непосредственно сами значения. А во втором переменные, тип которых мы не определили. А как известно, тип во флеше играет роль только при компиляции, а не во время исполения и флеш также как и раньше производит автоматическое преобразование типов. Это лекго проверить с помощью

Код:
function foo (a:Number, b:Number) {
return a * 1 + b * 1;
}
a = "1";
b = "1";
trace (foo (a, b));
На выходе мы получаем 2, а не "11"