是否有一种方法来检查Javascript中的闭包(或局部变量)

Is there a way to inspect a clousure in Javascript (or local variables)

本文关键字:Javascript 闭包 局部变量 检查 方法 一种 是否      更新时间:2023-09-26

我想这样做:

function example(name){
  var age = 0;
  var started = false;
  var start = function(){
    started = true;
  }
  this.forward = function(){
    age++;
  }
  console.log( SOMECODE );
}
example('boby');

我希望在SOMECODE中打印一些类似的东西:

name: "boby"
age: 0
started: false
start: [Function]
forward: [Function]

我喜欢这样写:

function inspect(locals){
  for(var name in locals){
    console.log(name, ':', locals[name]);
  }
}
console.log(inspect(example.locals));
// or
console.log(inspect(example.stack[-1].locals));
// or
console.log(inspect(example.clousure));

我的目标是编写用于在程序中调试的自动化工具,或者编写通用的错误日志。或者用局部变量的值打印调用堆栈。

是的,在Chrome开发工具中使用断点,这很容易。

首先,打开开发工具并单击Sources选项卡。找到包含要检查的代码的Javascript文件并选择它。文件的内容将出现在右边的窗口中。

接下来,单击左列中的一个行号以插入一个断点。使用上面的代码,尝试在第10行左右的某处(好吧,闭包中的任何地方都可以)。重新加载页面,当到达断点时,您将能够在下面的"Scope"窗口中检查各种变量的值。

您可以尝试以下操作。在这里我创建了一个新的实例的例子(myExample)。因此,函数中的this关键字将引用myExample(或任何其他调用example的实例),因此您可以设置属性和console.log

https://jsfiddle.net/w46ec5eb/1/

function example(name){
  this.age = 0;
  this.started = false;
  this.start = function(){
    this.started = true;
  };
  this.forward = function(){
    this.age++;
  };
  console.log(this );
}
var myExample = new example('boby');
myExample.start();
myExample.forward();
console.log(myExample);

function Example(name) {
  // define `init` function
  var obj = {};
  this.init = function (name) {
    // set `this` properties , values
    var name = name;
    var age = 0;
    var started = false;
    var start = function start() {
      started = true;
    }
    var forward = function forward() {
      age++;
    }
    this.forward = forward;
    
      obj[name] = name;
      obj[age] = age;
      obj["started"] = started;
      obj["start"] = start;
      obj["forward"] = forward;
    return this
    // this.start();
    // this.forward()
  }
  // call `this.init`
  var res = this.init(name);
  console.log( obj );
}
var example = new Example("boby");
console.log(example);