2013-07-08 92 views
0

如果這是一個簡單的問題,請耐心等待。在JavaScript中,我如何創建一個變量,它具有所選函數的範圍?例如,我希望變量var1可以用function1()和function2()更新,但不能與其他函數一起更新。可能嗎?適用於選定功能的變量

+0

可以通過原型定義一些特異性對象和方法還綁定到相同的對象。 –

回答

4

有可能通過與IIFE創建一個封閉做到這一點:

(function() { 
    var secretVar = 1; 

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

現在只有func1()func2()將能夠t O訪問secretVar

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 
1

你必須定義一個範圍有限的功能

var scope = function() { 

    var scopedVariable = "Hi"; 
    var func1 = function() { /* hi */ } 
    var func2 = function() { /* hi */ } 
} 
// scopedVariable is undefined 
1
(function() { 
    var a = 1; 
    window.inc = function() { 
     a++; 
    } 
    window.showA = function() { 
     alert(a); 
    } 
})(); 
inc(); 
showA(); 
+1

通常包含某種解釋和任何代碼是一個好主意。 – Spudley

-2

如果你使用像lodash(http://lodash.com)庫或下劃線(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' 
+0

你沒有約束一個變量。你綁定一個常量值'「嗨」'作爲'greeting'參數的參數。即使'「hi」存儲在一個變量中,你仍然只是綁定變量的當前值,所以這些函數沒有共享訪問該變量的權限。 –