If I'm not mistaken, what you execute with JavascriptExecutor is not "globalized" or maintaining state. Therefore the previous function, blah, it's scope is within the context of the call of that first JavascriptExecutor. The 2nd call has no knowledge of blah since it did not persist. It's not the same like what you can do in a javascript/error console in browser developer tools which maintains state.
The safer way to ensure your javascript code will persist then is to inject the javacript by way of the DOM (i.e. DOM injection) via inserting a script tag element with the javascript inside it. Then it should persist afterwards (but will be lost on page refresh). You can also store the desired javascript code in a javascript file then link to it via the script tag when inserting rather than embedding the code within the script tag to save lines of code and improve readability. However that would mean you have to host the javascript file on a (test) web server.
Here's an example of DOM script element insertion to inject javascript, though this one uses the external javascript file reference, you can modify to instead have the javascript code within the script element. Easier to use the file reference technique:
String injectScript = "var script = document.createElement(\"script\");";
injectScript += "script.src = \""+scriptSrc+"\";";
injectScript += "script.setAttribute(\"type\",\"text/javascript\");";
injectScript += "document.body.appendChild(script);";
((JavascriptExecutor) driver).executeScript(injectScript);
//IE & Safari workaround: add delay for injected code to finish loading in DOM before we call that code
Thread.sleep(1000);
//you should generally now be able to call the javascript code that has been injected. there might be some exception cases where it might not work (due to needing to be loaded on page load instead, etc.)