Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数中来回移动变量。我错过了什么?_Javascript - Fatal编程技术网

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

Javascript 在函数中来回移动变量。我错过了什么?,javascript,Javascript,我不确定如何找到这个问题的答案,所以我想弄明白: 我对javascript还是很陌生,所以请原谅我的逻辑和编码。 我正在学习回调,但我想通过 javascript生成一个动态语句,该语句将根据调用的函数而变化。 例如: “这两个数字:115加35=150。”,或 “这两个数字:115减去35=80。”,或 “这两个数字:115次35=4025。”,或 “这两个数字:115除以35=3.2857。” 在网页中,我有一个ID为“callback answer”的html元素: 答案应该出现在这里。否

我不确定如何找到这个问题的答案,所以我想弄明白: 我对javascript还是很陌生,所以请原谅我的逻辑和编码。 我正在学习回调,但我想通过 javascript生成一个动态语句,该语句将根据调用的函数而变化。 例如:

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

在网页中,我有一个ID为“callback answer”的html元素:

答案应该出现在这里。否则,脚本将被破坏

我看不到通过函数名设置变量的直接方法,因此我编写了另一个函数来执行此操作,并返回值“operand”

如果运行此命令,您可以看到主函数中的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); var answer=document.querySelector(“回调应答”); 变量1=115,变量2=35; 变量操作数; var操作=功能(op){ 如果(op==add){operand=“plus”;} else如果(op==减法){operand=“减法”;} else如果(op==乘法){operand=“times”;} else{operand=“除以”;} 返回操作数; }; var add=函数(a,b){返回a+b;}; var subtract=函数(a,b){返回a-b;}; var multiply=函数(a,b){返回a*b;}; var divide=函数(a,b){返回a/b;}; var calc=函数(num1、num2、回调){ “严格使用”; 操作(回调); log(“操作数为:“+操作数”); if(回调类型==“函数”){ 返回回调(num1,num2); } }; answer.innerHTML=“这两个数字:“+number1+”“+operand+”“+number2+”=”+calc(number1,number2,乘法);
这解决了您提出的问题:

var-answer=document.querySelector(“回调应答”);
变量1=115,变量2=35;
变量操作数;
var操作=功能(op){
如果(op==add){operand=“plus”;}
else如果(op==减法){operand=“减法”;}
else如果(op==乘法){operand=“times”;}
else{operand=“除以”;}
返回操作数;
};
var add=函数(a,b){返回a+b;};
var subtract=函数(a,b){返回a-b;};
var multiply=函数(a,b){返回a*b;};
var divide=函数(a,b){返回a/b;};
var calc=函数(num1、num2、回调){
“严格使用”;
操作(回调);
log(“操作数为:“+操作数”);
if(回调类型==“函数”){
返回回调(num1,num2);
}
};
var结果=计算(数字1,数字2,乘法);
answer.innerHTML=“这两个数字:“+number1+”“+operand+”“+number2+”=“+result

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

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

var calcResult = calc(number1, number2, multiply);
answer.innerHTML = "These two numbers: " + number1 + " " + operand + " " + number2 + " = " + calcResult;
我被教导尽可能避免全局变量。如果可以,通常最好让实用程序函数只接受值并返回结果,而不是将结果设置为全局变量,然后使用全局变量。在这个例子中,这可能意味着代码要多一点,但程序员出错的可能性要小得多

下面是一个不使用全局
操作数
变量的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;

您没有将返回值用于调用
操作
我不明白您的意思。我在calc函数中调用了“operand”,它表示“times”。那会让我觉得我是。您所说的返回值是什么?
操作
返回一个字符串。您没有在
calc
中使用它,非常感谢您的建议,但我想我不知道如何使用它。我不能再退货了,所以我想我不知道如何在这一点上使用它。这是我的问题。因为我已经在calc中有一个return语句了,所以我看不到也可以访问这个变量的方法。对不起,如果我听起来很笨。我正在努力。这还不容易。非常感谢你的解释!我知道JS执行是线性的,但在生成答案之前,我没有考虑调用函数(它安排并设置所有变量)。我不想再感谢你了。我自己没能弄明白这一点。我已经在办公室里断断续续地主演了三天了。我甚至不知道如何寻找答案,也不知道如何问这个问题,除了这样。JS是一种非常微妙的野兽,需要学习如何管理。非常感谢你的帮助,随时都可以。有时,只需要另一双眼睛就能发现问题。
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;