0

これが簡単な質問である場合は、ご容赦ください。javascriptで、選択した関数にスコープを持つ変数を作成するにはどうすればよいですか? たとえば、function1() および function2() で更新できる変数 var1 が必要ですが、他の関数では更新できません。出来ますか?

4

5 に答える 5

4

IIFE を使用してクロージャーを作成することで、これを行うことができます。

(function() {
    var secretVar = 1;

    window.func1 = function() { };
    window.func2 = function() { };
})();

今だけアクセスできるようになりfunc1()ますfunc2()secretVar

于 2013-07-08T13:48:59.383 に答える
1

制限されたスコープでこれらの関数を定義する必要があります

var scope = function() {

    var scopedVariable = "Hi";
    var func1 = function() { /* hi */ }
    var func2 = function() { /* hi */ }
}
// scopedVariable is undefined
于 2013-07-08T13:49:39.857 に答える
1
(function() {
    var a = 1;
    window.inc = function() {
        a++;
    }
    window.showA = function() {
        alert(a);
    }
})();
inc();
showA();
于 2013-07-08T13:50:09.957 に答える
1

次の方法でスコープを作成できます。

function MyScope(x) {
    this.x = x;
    this.function1 = function (val) {
        this.x = val;
    };
}

次に、オブジェクトのインスタンス化は次のようになります。

var myObject = new MyScope(5);
myObject.function1(10); // Changes x to 10
于 2013-07-08T13:47:23.673 に答える
-2

lodash ( http://lodash.com ) や underscore ( http://underscore.com ) などのライブラリを使用している場合は、_.bind 関数を使用して、関数に特定の「this」スコープを与えることができます。

これはhttp://lodash.com/docs#bindの例からのものです

var func = function(greeting) {
  return greeting + ' ' + this.name;
};

func = _.bind(func, { 'name': 'moe' }, 'hi');
func();
// → 'hi moe' 
于 2013-07-08T13:50:34.783 に答える