簡體   English   中英

javascript:訪問父函數的所有變量

[英]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方法顯示的屬性的值

JSFiddle

一種方法是刪除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關鍵字在全局范圍內創建變量,但是兩種方法最終都將具有相同的效果。

注意:

  1. 如果全局范圍中已經存在var1var20 ,則此方法可能無法工作。 在這種情況下,它將修改全局值,並可能導致不必要的錯誤。
  2. 此方法不是首選的官方代碼,是不好的做法原因

這是不可能的,因為當您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM