据我所知,Nashorn 会动态编译为 JVM 字节代码。但是,当 Nashorn 遇到带有字符串的 eval 函数时,它会做什么呢?它编译字符串内容还是解释它?
例如:
function sayHi() {
console.log("hi world");
}
for (var i=0;i<10;i++) {
eval("sayHi()"); // what happens here?
}
几个选项可能是: 1) 它不会编译 eval 中的字符串 2)它编译一次,缓存它,然后如果遇到相同的字符串,则重用相同的字节码(如上面的循环所示) 3) 它每次都会重新编译 eval String a-fresh 的内容
当然,这是一个小例子,其中 eval 字符串的内容只是一个方法调用,但想象一下它是更复杂的 JS 代码作为字符串传递到 eval 中。
最佳答案
Nashorn 始终将 javascript 编译为字节码以供执行。 JS 没有解释器。是的,如果无法从事件对象访问已编译/加载的类,则会卸载它们。
关于javascript - Nashorn Javascript 是否编译 "eval"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447865/