首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >js私有变量赋值

js私有变量赋值
EN

Stack Overflow用户
提问于 2012-08-24 04:09:14
回答 3查看 104关注 0票数 0

在理解js是如何工作的方面,我遗漏了一些东西。以下是问题所在:

我们像这样声明一个模块:

代码语言:javascript
复制
ns.obj = function() {
    // declare private variables
    var test = 1, test1 = 2;

    // declare some private function
    var myFunc=function(){test=2};

        return{test:test, myFunc:myFunc};
}

每次调用测试时,因为我们没有在函数中声明myFunc,所以js应该假设我们引用的是私有变量。

返回的对象确保我们有测试和myFunc可见,如果我们有模块。因此,调用ns.obj.test首先应该会得到1。在我们调用myFunc之后,应该给我们2。但它总是1。为什么会这样呢?

这是jsfiddle:http://jsfiddle.net/aXuwB/1/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-24 04:13:59

在JavaScript中,覆盖变量不会覆盖其他任何地方。您实际上是在返回对象中传递数字1;没有对test变量的引用。

你可以选择返回一个函数。函数包含代码,因此可以包含对变量的引用。调用它会得到一个变量:test: function() { return test; }

票数 1
EN

Stack Overflow用户

发布于 2018-02-12 23:27:08

代码语言:javascript
复制
var User = function () {
    var age = 0; // private
    this.incrementAge = function () { 
      return age++;
    }
    return this.incrementAge(); // closure
};

var firstUser = new User();
console.log('firstUser', firstUser.incrementAge());   // 1

var secondUser = new User();
console.log('secondUser', secondUser.incrementAge()); // 1
console.log('secondUser', secondUser.incrementAge()); // 2
票数 1
EN

Stack Overflow用户

发布于 2012-08-24 04:24:41

我认为这与每次执行函数时都要声明一个新的var test=1有关。需要说明的是,每次调用ns.obj()时,都会将一个新的测试变量重新赋值为1,然后在对象中返回它。因此,该值始终为1。

当您调用myFunc函数时,它将根据您的需要修改您的私有变量,但是您没有一种干净的方法来访问私有变量(无需重新设置该值)。

看一下这个,看看它是否演示了你想要的东西:

代码语言:javascript
复制
var ns = {};
ns.obj = function(){
    var test = 1;
    this.myFunc = function(){
        test=2
    };
    this.getTest = function(){
        return test;
    }
}

var testObj = new ns.obj();
console.log(testObj.getTest());
testObj.myFunc()
console.log(testObj.getTest());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12099191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档