subitem[i].action = (function makeConstantStr(str){
//this takes the array, gets the value and returns a new function with
//the current value in the array as the 2nd argument of the innermost function
return function(obj) {showURL(obj,str)};
}(subitemdata[i][1]));
If you wrap it in an immediately invoked function and pass the value in, it should evaluate it immediately and the argument will be set to the value of the array contents instead of to the array reference itself.
Just to make sure you're clear though, as long as you don't modify subitemdata, the array reference will return the same thing when you work with it. You don't need to do this unless you want to hold onto the value of the array at that particular moment in time.