var foo = (function(){
var x = "bar";
return function(){
console.log(x);
};
})();
console.log(foo.toString()); // function() {console.log(x);}
(foo)(); // 'bar'
eval('(' + foo.toString()+')()')); // error: x is undefined
为什么 var 不x
记录为"bar"
in foo.toString()
?
foo
具有与其 toString() 值不匹配的行为。foo
总是打印“bar”,但看着foo.toString()
不会告诉你这一点。
与此有关吗?如果决定不反编译一个函数来获取它的 toString() 值,为什么不包括依赖于外部函数作用域的对象的解析呢?
有没有办法使用旧的反编译方法来获取给定函数背后的实际代码?