2013-07-08 58 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”存储在一个变量中,你仍然只是绑定变量的当前值,所以这些函数没有共享访问该变量的权限。 –