Javascript 如何正确传递作用域以查找变量
我试图使用javascript APPLY函数将作用域从一个函数传递到另一个函数,但似乎我做得不对 如果您需要,这里有一把小提琴: 这是我的密码:Javascript 如何正确传递作用域以查找变量,javascript,Javascript,我试图使用javascript APPLY函数将作用域从一个函数传递到另一个函数,但似乎我做得不对 如果您需要,这里有一把小提琴: 这是我的密码: function a(){ var x = "hello"; b.apply(this, []); } function b(){ console.log("x: ", x); } a(); 我在想,虽然传递了范围,但变量/变量引用却没有传递 有没有一种方法可以在不定义Globals的情况下执行类似的操作 我是否应该将
function a(){
var x = "hello";
b.apply(this, []);
}
function b(){
console.log("x: ", x);
}
a();
我在想,虽然传递了范围,但变量/变量引用却没有传递
有没有一种方法可以在不定义Globals的情况下执行类似的操作
我是否应该将数据添加到它的实际部分,例如this.x=x代码>?然后在另一个函数中直接获取它<代码>变量x=此.x代码>
function a(){
var x = "hello";
this.x = x;
b.apply(this, []);
}
function b(){
var x = this.x;
console.log("x: ", x);
}
a();
Edit:第二个示例似乎是在全局范围内赋值,这并不好,而对于这个范围,我试图将对上下文的理解传递给。似乎在传递上下文之前必须定义上下文,否则,在大多数情况下,这指的是窗口您不能传递范围
您可以将b
的函数声明移动到a
的函数声明中,这样范围就可以开始了,也可以使用参数传递您关心的变量
声明var x代码>超出函数体
var x;
function a(){
x = "hello";
b.apply(this, []);
}
function b(){
//a.apply(this,[]);
console.log("x: ", x);
}
a();
这不是apply
所做的。你不能将作用域从一个函数传递到另一个函数。不能像这样传递作用域,但是如果你在a中定义了b,作用域就可以流动,请参阅。第二个代码段实际上是可以工作的,所以我假设如果在这个
中正确定义了内容,你就可以实际上传递作用域,尽管我不确定这样做是否好。我通常使用$。在OOP中扩展函数时应用
design@Fallenreaper-不要混淆范围和上下文。噢!是的,那可能是我的问题我认为作用域是一个函数的生命周期以及其中定义的所有变量。这就是为什么我认为我可以写一个扩展来实现这一点。我注意到我可以做一些类似于我的第二个代码示例的事情。这是一种糟糕的形式吗?在严格模式下,您试图在未定义的
上设置一个属性,该属性将引发异常。在非严格模式下,您在默认对象(浏览器中的窗口
)上设置一个属性,该对象是全局对象,因此具有与之关联的全局对象的所有常见警告。我刚刚注意到编辑。是的,我不想更改传入的参数,因为它们是用于其他变量的。我试图创建一个自定义标志,这是一种罕见的情况,在这种情况下,我不添加额外的参数。好啊是的,我在想,如果函数的范围一直持续到它完成执行,那么我就可以按照我的预期目标扩展函数。也许我想的更多的是不同的语言。问题是:有没有一种方法可以在不定义Globals的情况下做类似的事情呢?是的,我并没有试图这样做。这就是为什么我试图传递作用域/上下文,以便在不改变底层代码段的情况下分配变量。这样:x已经被分配了,在子函数中,我可以这样说:if(typeof x!=“undefined”)console.log(“x:”,x)代码>是的,我的第二次尝试是试图使它成为这个的一个属性,尽管它只是在这个过程中基本上使它成为一个全局属性
function a(){
var x = "hello";
b(x);
}
function b(x){
console.log("x: ", x);
}
a();
var x;
function a(){
x = "hello";
b.apply(this, []);
}
function b(){
//a.apply(this,[]);
console.log("x: ", x);
}
a();