我试图了解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(){
的名称
我试过并且没能理解我错过了什么。这是一些语法错误,还是与我的文本编辑器,崇高文本有关,因为,如果我尝试运行与从上面给出的链接复制完全相同的代码,那么事情就可以了。
在我的代码(上图)中,逻辑仍然与引用相同,只是缩进和变量名称已更改。是不是改变这些已经破坏了我的代码?
答案 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;
},
希望它有所帮助!!