console.log关闭的内容

时间:2019-01-13 09:29:41

标签: javascript node.js

我想看看JavaScript中闭包的内容。在下面的代码中,我想窥探匿名函数返回的闭包closure_f的内容。匿名函数的本地范围必须存储在某个地方,我想看看它的存储位置。如何在Node或浏览器中完成此操作?

var closure_F = (function(){
var info = "info-string";
var f1 = function(){
    console.log(info);
};
return f1;
}());

closure_F(); // logs 'info-string' as expected.
console.log(closure_F); // This did not provide any valuable information.

2 个答案:

答案 0 :(得分:6)

  

匿名函数的本地作用域必须存储在某个地方

这是JavaScript运行时的实现细节。它不会存储在暴露给JavaScript程序的任何位置。

  

这如何在Node或浏览器中完成?

专用调试工具可以检查那里的数据。在console.log调用上设置一个断点。

请注意,优化意味着只有在返回的函数中使用的变量才可见。

答案 1 :(得分:0)


方法1:内部属性void bouncePaddle(){ if(ballPOSx -10 >= 0 && ballPOSx -10 <= 0 + paddleWidth && ballPOSy >= paddleY && ballPOSy <= paddleY + paddleHeight){ BOUNCE2 = true; ballDirection = random(PI/4,(7*PI/4)); ball_x_speed = cos(ballDirection); } } if(ballPOSx + 10>= width-20 && ballPOSx +10 <= width-20 + paddleWidth && ballPOSy >= paddle2Y && ballPOSy <= paddle2Y + paddleHeight){ BOUNCE2 = true; ballDirection = random((3*PI/4),(5*PI/4)); ball_y_speed = sin(ballDirection); } }

您可以通过添加[[Scope]]来修改代码,然后在 Chrome开发者控制台中运行它:

console.dir


如果打开控制台,您将看到它打印对象(函数)的所有属性,包括内部属性var closure_F = (function(){ var info = "info-string"; var f1 = function(){ console.log(info); }; return f1; }()); closure_F(); console.dir(closure_F); // console.dir prints all the properties of a specified JavaScript object

此内部属性[[Scopes]]将包含[[Scopes]]的所有周围范围,包括其闭包。

closure_f是JS的内部实现,不能在程序中以编程方式访问。

Scope internal property containing the Closure


方法2:创建断点-[[Scope]]

查看函数 Closure 的另一种方法是添加一个debugger语句,并在要检查的闭包函数中创建一个断点。 例如,您可以在控制台中运行它:

debugger


www.ecma-international.org >> [[Scope]] >>表9