lib/build.js
function exec (ctx, scope, data) {
  console.log('exec', ctx, scope, data)
  var fn = getFunction(ctx, scope, data[0])
  var elements = data.slice(1)
  var params = elements.map(function (p) {
    return Array.isArray(p) ? exec(ctx, scope, p)
      : (p[0] === '$') ? ctx[p] : p
  }).filter(function (p) { return p !== VAR })
  return fn.apply(null, params)
}
function exec (ctx, scope, data) {
  console.log('exec', ctx, scope, data)
  var fn = getFunction(ctx, scope, data[0])
  var elements = data.slice(1)
  var params = elements.map(function (p) {
    return Array.isArray(p) ? exec(ctx, scope, p)
      : (p[0] === '$') ? ctx[p] : p
  }).filter(function (p) { return p !== VAR })
  return fn.apply(null, params)
}
function exec ( ctx , scope , data ) { console . log ( 'exec' , ctx , scope , data ) var fn = getFunction ( ctx , scope , data [ 0 ] ) var elements = data . slice ( 1 ) var params = elements . map ( function ( p ) { return Array . isArray ( p ) ? exec ( ctx , scope , p ) : ( p [ 0 ] === '$' ) ? ctx [ p ] : p } ) . filter ( function ( p ) { return p !== VAR } ) return fn . apply ( null , params ) }
exec a data array
exec a data array