我想看看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.
答案 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的内部实现,不能在程序中以编程方式访问。
方法2:创建断点-[[Scope]]
查看函数 Closure 的另一种方法是添加一个debugger
语句,并在要检查的闭包函数中创建一个断点。
例如,您可以在控制台中运行它:
debugger
www.ecma-international.org >> [[Scope]] >>表9