具有所选函数作用域的变量

Variable with scope for the selected functions

本文关键字:作用域 变量 函数      更新时间:2023-09-26

如果这是一个简单的问题,请耐心等待。在javascript中,如何创建一个对所选函数具有作用域的变量?例如,我想要变量var1,它可以用function1()和function2()更新,但不能用任何其他函数更新。有可能吗?

可以通过使用IIFE:创建闭包来实现这一点

(function() {
    var secretVar = 1;
    window.func1 = function() { };
    window.func2 = function() { };
})();

现在只有func1()func2()能够访问secretVar

您可以通过以下方式创建作用域:

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

您必须用受限范围的来定义这些函数

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

如果您使用的是像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'