将JavaScript变量添加到本地范围
我有一组变量,我想把它们作为一个函数的输入,然后定义它们以便在该函数中使用 例如:将JavaScript变量添加到本地范围,javascript,scope,Javascript,Scope,我有一组变量,我想把它们作为一个函数的输入,然后定义它们以便在该函数中使用 例如: var variables = { foo: 1, bar: 2, }; function doSomething (scope) { makeLocal(scope); // I'd like something to do this return foo + bar; } doSomething(variables); // should return 3 这样的事情存
var variables = {
foo: 1,
bar: 2,
};
function doSomething (scope) {
makeLocal(scope); // I'd like something to do this
return foo + bar;
}
doSomething(variables); // should return 3
这样的事情存在吗?PHP有一个功能来实现这一点,我希望JavaScript也有类似的功能。我知道我可以向
窗口添加属性,但如果可能的话,我不想污染我的全局名称空间。有一个很好的javascript库,允许您使用php函数,就像
看一看
以下是您要查找的内容:
JavaScript与PHP的摘录没有任何等价之处。一种接近的方法是在调用makeLocal()
时绑定当前上下文,并为其分配变量:
这样做的缺点是如果doSomething()
没有上下文,它将是全局对象(浏览器中的窗口),并且您的变量会污染全局范围。scope.foo+scope.bar
有什么问题?@entropic我计划有很多变量,并大量使用它们。如果我能帮上忙的话,我宁愿不要到处都有“scope”(甚至是一个单字符的变量名)。在JS中,这不是一个本地的方法。如果可以使用一些难看的eval()
技巧来实现这一点,则必须在doSomething()
中实现,否则新变量将在makeLocal()
的范围内。我可能说得太快了,这在窗口
之外的任何上下文中都不起作用。您能否提供一个在另一个上下文中工作的示例?只有当This
是全局上下文时(大多数时间window
除外,例如在严格模式下),此示例才有效。当doSomething.call({},scope)
或obj.doSomething(scope)
对此问题时,将不起作用;您需要使用返回this.foo+this.bar代码>。但是当它工作时,它当然会污染全局名称空间。是的,我同意-它不在全局范围之外工作。让它在任何范围内工作的唯一方法是让它存储window[key]=scope[key]
,而不是this
,但这总是使用globals。我认为在JavaScript中没有其他方法可以做到这一点。
var variables = {
foo: 1,
bar: 2,
};
function makeLocal(scope){
for(var key in scope){
this[key] = scope[key];
}
}
function doSomething (scope) {
makeLocal.call(this, scope);
return foo + bar;
}