I'd start by pointing out that you forgot to declare your loop variables, so they become global, you need var:
for (var i; ...
--^--
Also you forgot a few semicolons after your function expressions, JSHintJSHint will tell you about these common errors.
But your code looks good, although maybe not very JavaScript-ish. Targeting ES5 compliant browsers (IE9+) you could simplify your code, so instead of using for loops, you'd use built-in higher-order functions, such as map, filter and reduce:
var sum = function(xs) {
return xs.reduce(function(x, y){return x + y});
};
var multiply = function(xs) {
return xs.reduce(function(x, y){return x * y});
};
var reverse = function(x) {
return x.split('').reverse().join('');
};
var findLongestWord = function(xs) {
return Math.max.apply(0, xs.map(function(x){return x.length}));
};
var filterLongWords = function(xs, i) {
return xs.filter(function(x){return x.length > i});
};
var charFreq = function(x) {
return x.split('').reduce(function(acc, x) {
acc[x] = ++acc[x] || 1;
return acc;
},{});
};
For code that is very generic I prefer to use short variables names such as xs, x, y, etc. These are inspired by other functional languages, and are well understood, but you could always add JSDoc annotations, for example:
/**
* @param {String} x A string
* @returns {Object} Counted occurrences of characters in x
*/
var charFreq = function(x) {
return x.split('').reduce(function(acc, x) {
acc[x] = ++acc[x] || 1;
return acc;
},{});
};