简体   繁体   English

如何获得封闭的变量?

[英]How to get variables out of closure?

I have this class/service: 我有这个课程/服务:

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

var user;

function set( user ) {
    user = user;
}

function getVotes() {
    return user.votes;
}

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

}());

I store the user like so: User.set( user ); 我这样存储用户: User.set( user ); but when i try and retrieve the user with User.user or get the users votes with User.getVotes() I get undefined. 但是,当我尝试使用User.user检索用户或使用User.getVotes()获得用户投票时,我无法定义。 Why is that and is there a better way? 为什么会这样,还有更好的方法吗?

You need to use a different name for the setter methods parameter. 您需要为setter方法参数使用其他名称。 Since you have used the name user for both the closure variable and the parameter inside the setter method when referring user it will only refer to the parameter not the closure item. 由于在引用user时已在闭包变量和setter方法内部的参数中使用了名称user ,因此它仅引用参数而不是闭包项。

The assignment operation does not do anything as it is assigning the value of a variable to itself 赋值操作不执行任何操作,因为它正在将变量的值赋给它自己

 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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM