console.log一个闭包的内容

N. *_*ikh 1 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.
Run Code Online (Sandbox Code Playgroud)

ros*_*s-u 8


方式一:内部财产[[Scope]]

您可以通过添加来修改代码console.dir,然后在Chrome 开发控制台中运行它:

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
Run Code Online (Sandbox Code Playgroud)

如果打开控制台,您将看到它打印了对象(函数)的所有属性,包括内部属性[[Scopes]]。

此内部属性[[Scopes]]将包含 的任何周围范围closure_f及其闭包。参见示例:

包含闭包的作用域内部属性

注意: [[Scope]]是JS的内部实现,不能在程序内以编程方式访问。



方式 2:设置断点 -debugger

查看函数闭包debugger的另一种方法是添加一条语句并在要检查其闭包的函数中创建一个断点。作为示例,您可以在控制台中运行此命令:

function createClosure (){

  var secret = "shhhhh";

  return function inner(){
    debugger;
    console.log(secret);
  };
  
};

var innerFunction = createClosure();

innerFunction();
Run Code Online (Sandbox Code Playgroud)

www.ecma-international.org >> [[范围]] >> 表 9


Que*_*tin 6

匿名函数的本地范围必须存储在某处

这是JavaScript运行时的实现细节.它不存储在任何暴露给JavaScript程序的地方.

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

专用调试工具可以检查那里的数据.在console.log通话中设置断点.

请注意,优化意味着只返回返回函数中使用的变量.