javascript中的闭包有奇怪的语法错误

时间:2014-08-13 06:13:20

标签: javascript node.js closures

我试图了解js闭包的一个属性,它说: 来自Closures store references to the outer function’s variables

的引用
function myId()
{
var userID=999;
return 
{
    getId: function()  {
        return userID;
    },
    setId: function(newId)  {
        userID = newId;
    }
};
}
var callInnerFun = myId();
console.log(callInnerFun.getId());
callInnerFun.setId(500);
console.log(callInnerFun.getId());

当我尝试在Node或甚至浏览器上运行上述代码时,我收到以下错误:

  

SyntaxError:function语句需要getId:function(){

的名称

我试过并且没能理解我错过了什么。这是一些语法错误,还是与我的文本编辑器,崇高文本有关,因为,如果我尝试运行与从上面给出的链接复制完全相同的代码,那么事情就可以了。

在我的代码(上图)中,逻辑仍然与引用相同,只是缩进和变量名称已更改。是不是改变这些已经破坏了我的代码?

2 个答案:

答案 0 :(得分:1)

你有两个错误:第一个是在setId之前的额外结束括号。删除后,请更改:

return 
{

return {

在Javascript中,大括号位置很重要,因为如果你没有一个你不想要的分号,它会在return语句后插入一个分号。我还改变了myId定义中的大括号位置。最终的代码是:

function myId() {
var userID=999;
return {
    getId: function()  {
        return userID;
    },
    setId: function(newId)  {
        userID = newId;
    }
};
}
var callInnerFun = myId();
console.log(callInnerFun.getId());
callInnerFun.setId(500);
console.log(callInnerFun.getId());

答案 1 :(得分:0)

这里有一个'}'。它也应该是'return {'

更改以下

getId: function()  {
    return userID;
}
},

getId: function()  {
    return userID;
},

希望它有所帮助!!