【问题标题】:weird syntax error with closures in java scriptjavascript中闭包的奇怪语法错误
【发布时间】:2014-10-06 09:39:59
【问题描述】:

我试图理解 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 statement requires a name at getId: function() {

我尝试过但未能理解我真正错过了什么。是语法错误,还是与我的文本编辑器 sublime text 有关,因为如果我尝试运行与从上面给出的链接复制的完全相同的代码,那么一切正常。

而在我的代码(上面)中,逻辑仍然与引用相同,只是缩进和变量名称发生了变化。是改变这些破坏了我的代码吗?

【问题讨论】:

标签: javascript node.js closures


【解决方案1】:

这里有一个'}' 是多余的。而且应该是'return {'

更改以下内容

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

getId: function()  {
    return userID;
},

希望对你有帮助!!

【讨论】:

  • 这是在堆栈中发布代码时的拼写错误。
【解决方案2】:

你有两个错误:第一个是 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());

【讨论】:

  • 谢谢。您提到的第一个错误是在堆栈中发布代码时出现拼写错误。第二个错误是有道理的,因为我不知道 JS auto 放入分号。
猜你喜欢
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2013-09-03
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多