我们如何获得函数的执行上下文?

时间:2018-08-23 06:10:35

标签: javascript

假设我们在全局上下文中声明一个变量,如下所示:

var someVariable = "someValue";

我们始终可以像在全局执行上下文中一样访问其值,例如window['someVariable']。 但是,如果它在某个函数内部而不是在全局执行上下文中,我们如何以相同的方式访问它的值?例如。

function someFunction(someParameter) {
  var someVariable = "some value";
  // some code
}

我想要做someFucntionContext['someParameter']someFucntionContext['someVariable']之类的事情,以访问someFucntion的执行上下文中那些变量的值,就像我刚才对全局上下文中声明的变量所做的那样

2 个答案:

答案 0 :(得分:1)

没有返回对象或实例化函数并访问属性,这是不可能的。

如果您使用Log.ForContext<YourMiddleware>()而不是windowvar,则全局变量自动是let对象的属性。例如,根级功能自动成为const对象的方法。但是函数的行为不像原始对象。您需要做类似的事情

window

OR

function Favorites(){
  return{
     food: "burrito",
     color: "gray"
  }
}

var fav = Favorites();
var favfood = fav.food; //fav['food']

就像这样

function Favorites(){
  this.food = "burrito";
  this.color = "gray";
}

var fav = new Favorites();
var favfood = fav.food; //fav['food']

答案 1 :(得分:0)

一种方法可能是公开函数本身的某些属性。

function fn(){
  fn.num = 100;
}
//access fn.num
console.log(fn["num"])

您可以控制要从函数本身公开的属性。例如,

function doSomething(num, addStr){
  //expose num
  doSomething.num = num;
  var str = "Hello ";
  if(addStr){
    str += addStr;
  }
  //expose str
  doSomething.str = str;
}

//set num
doSomething(100);

//access num
console.log(doSomething.num)
console.log(doSomething["num"])

//set num and str
doSomething(200, "Jerry!")

//access str
console.log(doSomething["str"])