javascript - 如何让变量脱离闭包?

标签 javascript

我有这个类(class)/服务:

var User = (function () {
'use strict';

var user;

function set( user ) {
    user = user;
}

function getVotes() {
    return user.votes;
}

return {
    user     : user,
    set      : set,
    getVotes : getVotes
};

}());

我像这样存储用户:User.set( user ); 但是当我尝试使用 User.user 检索用户或使用 User.getVotes() 获取用户投票时,我得到了未定义的信息。 为什么会这样?有更好的方法吗?

最佳答案

您需要为 setter 方法参数使用不同的名称。由于在引用 user 时,您在闭包变量和 setter 方法内的参数都使用了名称 user ,因此它只会引用参数而不是闭包项。

赋值操作不执行任何操作,因为它将变量的值赋给自身

var User = (function() {
  'use strict';

  var user;

  function set(usr) {
    user = usr;
  }

  function getVotes() {
    return user.votes;
  }

  return {
    user: user,
    set: set,
    getVotes: getVotes
  };

}());

User.set({
  name: 'x',
  votes: 5
});

snippet.log('votes: ' + User.getVotes())
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于javascript - 如何让变量脱离闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32086193/

相关文章:

javascript - 即使在 AngularJS 中使用 ng-cloak,页脚模板也会闪烁

javascript - 获取引发事件的元素的 id

javascript - 在 JS 中使用反引号 (`` ) 会导致空行

Javascript 替换功能不起作用

javascript - 在 JS 中使用 keypress() 时禁用 Firefox 自动搜索

javascript - 将以@开头的任何单词加粗

javascript - 带锁的多个 if 语句

javascript - Jquery 成功函数未使用 JSONP 触发

Javascript 导入句柄未定义

javascript - 将包含 NSDictionary 对象的 NSArray 传递给 Javascript 函数