我的作业有问题。这是作业:
具有以下功能。
let rechne = function(x,y,operation) {
let ergebnis = x - y;
if (!operation) {
let ergebnis = x + y;
console.log(ergebnis);
}
return ergebnis;
}
重写函数,以便变量的所需块范围 可以在ES5中实现。
所以我写了这个:
let rechneScope = function(x,y,operation) {
(function(){
let ergebnis = x - y;
})()
if (!operation) {
(function(){
let ergebnis = x + y;
console.log(ergebnis);
})()
}
return ergebnis;
}
假定我在console.log中调用了该函数,例如console.log(rechneScope(10, 2))
我希望第一个变量为8,第二个变量为12。
但是当我重新加载浏览器时,控制台始终为第二个变量打印12,而对于第一个变量,结果却有所不同。有时2,有时8,有时15。我真的很困惑。为什么会这样呢?
答案 0 :(得分:2)
首先,您假设所需的输出为8
,然后12
是错误的。第一个执行的console.log
是带有ergebnis = x + y
的那个,因此您应该看到12
然后是8
。
接下来,ES6中引入了let
,因此,如果您限制自己使用ES5,则只能使用var
。
最后,请确保将每个变量的整个范围包装在IIFE中。您在第一个函数之外有return ergebnis
,以便在执行代码行时该变量不再在范围内。
正确的实现应如下所示:
var rechneScope = function(x, y, operation) {
return (function() {
var ergebnis = x - y;
if (!operation) {
(function() {
var ergebnis = x + y;
console.log(ergebnis);
})()
}
return ergebnis;
})()
}
console.log(rechneScope(10, 2))
我知道这不是您分配的内容,只是作为参考,Babel不会尝试模拟ES6范围。这是Babel编译相同内容的方法:
"use strict";
var rechne = function rechne(x, y, operation) {
var ergebnis = x - y;
if (!operation) {
var _ergebnis = x + y;
console.log(_ergebnis);
}
return ergebnis;
};
答案 1 :(得分:0)
您犯了小错误。
解决方案是删除return语句并在每个块中打印答案。您会得到理想的结果
Copy()