As mentioned by Bergi, you pass data to and from your web workers using events.
Regarding #3 - There's a concept of "inlined workers", where you create a blob object, and then from that, create a url object. Something like:
var blobURL = URL.createObjectURL( new Blob([ '(',
function(){
self.addEventListener('message', function (e){
// Do stuff with array here
}.toString(),
')()' ], { type: 'application/javascript' } ) ),
worker = new Worker( blobURL );
worker.postMessage(/* big array */);
You can find some information regarding inline workers here:
http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers
I threw together this fiddle with an inlined web worker and a (simple) recursive function: http://jsfiddle.net/tQcuy/