[英]javascript: access all variables of a parent function
我决定创建一个funcB
函数,该函数从funcA
调用。 我希望funcA中的所有变量都可以在funcB中使用,以便func B可以更改该变量。 如何修改下面的代码,使其符合我的要求? 我怀疑传递所有变量是唯一可行且最佳的方法。
function funcB(){
alert(var1);//how to make it alert 5
alert(var20);//how to make it alert 50
}
function funcA(){
var var1=5;
...
var var20=50;
funcB();
}
var obj = {
one : "A",
two : "B",
fnA : function() {
this.fnB(); // without fnB method result will be displayed as A B, with fnB as C D
console.log(this.one + " " + this.two);
},
fnB : function() {
this.one = "C";
this.two = "D";
}
};
obj.fnA();
this
关键字引用obj
对象
您可以在对象内部定义属性和方法。 使用方法,可以根据需要对所有变量进行操作,在使用fnB
示例中,我正在更改通过fnA
方法显示的属性的值
一种方法是删除var
关键字:
function funcB(){
alert(var1);//how to make it alert 5
alert(var20);//how to make it alert 50
}
function funcA(){
var1 = 5;
var20 = 50;
funcB();
}
这会将它们公开给全局范围,以便funcB
可以访问它们。 注意,您也可以使用var
关键字在全局范围内创建变量,但是两种方法最终都将具有相同的效果。
注意:
var1
或var20
,则此方法可能无法工作。 在这种情况下,它将修改全局值,并可能导致不必要的错误。 这是不可能的,因为当您使用var
关键字声明变量时,它们的scoped
于声明它们的函数。
如果您避免使用var
关键字,则将它们定义为global variable
。 这被认为是非常不好的做法。
我建议您阅读javascript编码模式 ,尤其是模块模式。
例如:
var myNamespace = (function () {
var foo, bar;
return {
func1: function() {
foo = "baz";
console.log(foo);
},
func2: function (input) {
foo = input;
console.log(foo);
}
};
})();
用法:
myNamespace.func1();
// "baz"
myNamespace.func2("hello");
// "hello"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.