[英]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.