This function assumes that the input string is a valid encoded string. If it's missing a terminator (i.e. it does not end with a character that marks the end of a number) then it will enter an infinite loop [1]. It might be a good idea to check against `encodedLength` in the inner loop. If `encoded` is not a valid then it's OK to return a wrong result, but infinite loops are bad :) I'd add a couple of `goog.asserts.assert`s to catch this in debug/whitespace only builds.

(P.S. Sorry to be pedantic, but I know that you can take it!)

[1] Explanation: when `i` runs off the end of the string, `encoded.charCodeAt(i++)` will return `NaN`. `NaN - 63` is `NaN`. `NaN >= 0x20` is `false` so the inner loop will never terminate.