繁体   English   中英

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

[英]How can we get the execution context of a function?

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

var someVariable = "someValue";

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

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

我想要做喜欢的事, someFucntionContext['someParameter']someFucntionContext['someVariable']访问这些变量的值在执行方面someFucntion像我刚才没有为变量在全球范围内宣布。

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

全局变量自动是window对象的属性,前提是您使用var而不是letconst 例如根级函数自动成为window对象的一个​​方法。 但是函数的行为不像原始对象。 你需要做类似的事情

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']

像这样

var favfood = window.fav.food;
var favcolor = window['fav']['color']

其中一种方法可能是暴露函数本身的某些属性。

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"])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM