var FThread= new function(){
Version: 4
Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in'
License: 'public domain'
Implementation:
var scripts= document.getElementsByTagName( 'script' )
var script= scripts[ scripts.length - 1 ]
var starter= document.createElement( 'button' )
starter.id= 'thread starter'
starter.style.display= 'none'
script.parentNode.insertBefore( starter, script )
var FThread= function( proc ){
var thread= function( ){
var res, self= this, args= arguments
starter.onclick= function( ev ){
( ev || event ).cancelBubble= true
starter.onclick= null
res= thread.proc.apply( self, args )
}
starter.click()
return res
}
thread.proc= proc
return thread
}
Export: return FThread
Usage:
var inverse= FThread(function( a ){
if( a === -1 ) throw (void 0)()
if( a === 0 ) throw new Error( 'custom error' )
return 1/a
})
alert([ inverse( -1 ), inverse( 0 ), inverse( 1 ) ])
// alerts ",,1" and two exceptions in console log
}
исключения всплывают везде, только вот кастомные исключения теряют бэктрейс в мозилле и вообще всё в опере