Джефф прав. Обратите внимание, что на самом деле это не очень хороший тест на статическое определение объема (что имеет JS). Лучше было бы:
myVar=0;
function runMe(){
var myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
runMe();
alert(addMe);
alert(myVar);
На языке со статической областью (например, JS), который предупреждает 10 и 0. Var myVar (локальная переменная) в runMe затеняет глобальный myVar в этой функции. Однако это не имеет никакого эффекта в callMe, поэтому callMe использует глобальный myVar, который по-прежнему равен 0.
На языке с динамической областью действия ( в отличие от JS) callMe будет наследовать область действия от runMe, поэтому addMe станет 20. Обратите внимание, что myVar все равно будет 0 в предупреждении, поскольку предупреждение не наследует область действия из любой функции.