当前位置: 首页 > 知识库问答 >
问题:

在函数中移动变量。我错过了什么?

盛嘉
2023-03-14

我不确定如何找到这个问题的答案,所以这里是我想要弄清楚的:我对javascript还是一个新手,所以请原谅任何复杂的逻辑和编码。我正在学习回调,但我想进一步让javascript生成一个动态语句,该语句将根据调用的函数而改变。例如:

“这两个数:115加35=150.”,或
“这两个数:115减35=80.”,或
“这两个数:115乘以35=4025.”,或
“这两个数:115除以35=3.2857。”

在网页中,我有一个ID为“Callback-Answer”的html元素:

    <p id="callback-answer">The answer should appear here. If not, the script is broken.</p>

我找不到一种直接通过函数名设置变量的方法,所以我编写了另一个函数来实现,并返回值“operand”。

如果运行这个函数,您可以看到main函数中的console.log返回了我想要的值,但我似乎无法从任何函数中得到它,即使我在全局作用域级别声明了变量名。最后的innerHTML语句只显示“undefined”,而不是我设置的操作数。函数已经在返回值,所以我不认为我可以将这个值放入同一行中。我如何在函数之外获得对这个变量的访问?我甚至需要“操作”功能吗?有没有一个很好的人可以提出一个更好的方法或者什么想法?

温柔点,我在练习。



    var answer = document.querySelector("#callback-answer");
    var number1 = 115, number2 = 35;
    var operand;

    var operation = function (op) {
        if (op === add) {operand = "plus";}
        else if (op === subtract) {operand = "minus";}
        else if (op === multiply) {operand = "times";}
        else {operand = "divided by";}
        return operand;
    };

    var add = function (a,b) {return a + b;};
    var subtract = function (a,b) {return a - b;};
    var multiply = function (a,b) {return a * b;};
    var divide = function (a,b) {return a / b;};

    var calc = function (num1, num2, callback) {
        "use strict";
        operation(callback);
        console.log("The operand is: " + operand);
        if (typeof callback === "function") {
            return callback(num1,num2);
        }
    };


    answer.innerHTML = "These two numbers: " + number1 + " " + operand + " " + number2 + " = " + calc(number1, number2, multiply);


共有2个答案

巩子实
2023-03-14

这解决了您提出的问题:

null

var answer = document.querySelector("#callback-answer");
var number1 = 115, number2 = 35;
var operand;

var operation = function (op) {
    if (op === add) {operand = "plus";}
    else if (op === subtract) {operand = "minus";}
    else if (op === multiply) {operand = "times";}
    else {operand = "divided by";}
    return operand;
};

var add = function (a,b) {return a + b;};
var subtract = function (a,b) {return a - b;};
var multiply = function (a,b) {return a * b;};
var divide = function (a,b) {return a / b;};

var calc = function (num1, num2, callback) {
    "use strict";
    operation(callback);
    console.log("The operand is: " + operand);
    if (typeof callback === "function") {
        return callback(num1,num2);
    }
};

var result = calc(number1, number2, multiply);
answer.innerHTML = "These two numbers: " + number1 + " " + operand + " " + number2 + " = " + result
html lang-html prettyprint-override"><p id="callback-answer"></p>
傅丁雷
2023-03-14

在您的代码中,operand一开始未初始化。您确实在calc函数中设置了operand的值,但问题是:在代码的最后一行中,在使用operand之后调用了calc。这意味着在调用calc函数之前,操作数没有值,这就是为什么您可以console.log并在calc中获得它的值,而不是在最后一行代码中。

一个快速而简单的修复方法是调用calc并在使用操作数之前将结果放入一个变量中,如下所示:

var calcResult = calc(number1, number2, multiply);
answer.innerHTML = "These two numbers: " + number1 + " " + operand + " " + number2 + " = " + calcResult;

我被教导要尽可能避免全局变量。如果可以,通常更好的做法是让实用程序函数简单地接受值并返回结果,而不是将结果设置为全局varaible然后使用全局变量。在这种情况下,它可能意味着多了一些代码,但它不太容易出现程序员错误。

以下是对Javascript代码的编辑,它不使用全局操作数变量:

var answer = document.querySelector("#callback-answer");
var number1 = 115, number2 = 35;

var operation = function (op) {
  var operand;
  if (op === add) {operand = "plus";}
  else if (op === subtract) {operand = "minus";}
  else if (op === multiply) {operand = "times";}
  else {operand = "divided by";}
  return operand;
};

var add = function (a,b) {return a + b;};
var subtract = function (a,b) {return a - b;};
var multiply = function (a,b) {return a * b;};
var divide = function (a,b) {return a / b;};

var calc = function (num1, num2, callback) {
  "use strict";
  if (typeof callback === "function") {
    return callback(num1,num2);
  }
};

var operand = multiply;
var operandString = operation(operand);
var calcResult = calc(number1, number2, operand);
answer.innerHTML = "These two numbers: " + number1 + " " + operandString + " " + number2 + " = " + calcResult;
 类似资料:
  • 我知道这是异步性,但我已经遵循了添加回调函数的步骤,为什么我的变量在函数中修改后没有改变呢?-异步代码引用,但我只能访问回调函数内部的更改。这是我的代码片段。请帮忙

  • 我正在尝试使用着色器(感兴趣的点是负责输出最终顶点位置的顶点着色器)正确地平移网格点并将其投影到窗口表面。 模型(四边形)由以下顶点表示:[-0.5f,0.5f,0f](V0),[-0.5f,-0.5f,0f](V1),[0.5f,-0.5f,0f](V2),[0.5f,0.5f,0]。 我有以下两种方法来创建透视投影矩阵: 这个方法可以在Transformations类中找到,它创建并返回透视投

  • 问题内容: 我刚刚开始学习Go,有些事情引起了我的注意。 功能如下: 等等。作为来自C语言的人,我想知道: 1)是否可以通过变量本身来调用这些函数(如中所述)? 2)这是一种常见的做法(定义泛型函数并让其找出类型及其应执行的操作),还是仅用于内置类型。例如,如果我要定义自己的类型,例如,是否应该在类型内定义和附加函数,并将其命名为 还是应该定义一个接收列表的函数,例如: 问题答案: 1-您不能将内

  • 下面的代码为什么编译? std::move的文档说 执行此操作后,“移动自”范围中的元素仍将包含适当类型的有效值,但不一定与移动前的值相同。 所以这实际上可以改变对象foo2,即使它声明为const。为什么这样做有效?

  • 我正试图将即时消息添加到现有的应用程序中。但是我不确定应该如何配置socket.io模块。我已经尝试了以下方法: 因为打开一个页面时没有记录connected,所以我假设丢失了一些东西。我的错误在哪里?

  • 我有财产课: 还有一种方法: 在类的构造函数我有: 为什么当我从object按键调用函数时。我收到一条未定义的消息,为什么变量在内部不可用: