首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceError:未定义对象支柱

ReferenceError:未定义对象支柱
EN

Stack Overflow用户
提问于 2018-09-13 16:53:35
回答 2查看 142关注 0票数 2

我有以下JavaScript:

代码语言:javascript
复制
var calc = {
    getMem: function(){
        return mem;
    },

    mem:0,

    add: function (a,b){
        mem =  a*b;
        return a*b;
    },
}

当我打电话的时候

代码语言:javascript
复制
calc.getMem();

离开后我就得到了一个ReferenceError

但是,当我打电话

代码语言:javascript
复制
calc.add(3,2);
calc.getMem();

我得到了想要的结果。

显然我错过了这个,所以我把getMem改为

代码语言:javascript
复制
getMem: function(){
    return this.mem;
}

我的问题是:当我第一次调用add时,它为什么在inital状态下工作(没有这个)?

EN

回答 2

Stack Overflow用户

发布于 2018-09-13 16:58:17

calc不是一个类,这不是您如何设置对象值的方法,如果在add内部添加一个console.log(),您可以看到mem是未定义的,所以行

代码语言:javascript
复制
mem =  a*b;

将名为mem的全局变量设置为a*b,而不是本地值,

代码语言:javascript
复制
calc = {
    getMem: function(){
        return mem;
    },

    mem:0,

    add: function (a,b){
	console.log(mem)
        mem =  a*b;
        return a*b;
    },
}

calc.add(0,0)

你必须用this.mem来设置它

代码语言:javascript
复制
"use strict";    

const calc = {
    getMem: function(){
        return this.mem;
    },

    mem:0,

    add: function (a,b){
        this.mem =  a*b;
        return a*b;
    },
}

calc.add(2,3)
console.log(calc.getMem())

并在this.mem函数中返回getMem

票数 2
EN

Stack Overflow用户

发布于 2018-09-13 17:00:49

当您调用函数getMem()时,它无法找到任何名为mem的局部变量或全局变量,这就是您获得引用错误的原因。当您执行add()函数时,它在全局范围内创建一个变量mem,所以现在当您调用getMem()时,将返回全局变量mem

strict模式下执行程序,您将得到引用错误。

代码语言:javascript
复制
"use strict"
var calc = {
  getMem: function(){
      return mem;
  },

  mem:0,

  add: function (a,b){
      mem =  a*b;
      return a*b;
  },
}
calc.add(2, 4)
console.log(mem) 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52318382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档