以下代码将所有低于限制的点推入function parialLoad() {
$("#loadFrame").load("/Product");
}
,直到data
返回getPoint
。
null
在这种特殊情况下,我在条件条件下使用赋值,我知道它看起来很丑陋,但问题集中在while ((x = getPoint()) && x < limit) {
data.push(x)
}
console.log(x, 'x should be undefined here')
上,它不是块的局部内容。我试图在此处放置x
,但不起作用。
是否可以在let
语句中限制x
的范围?
另一种可行的实现方式就是这种方式,但是在这种情况下,我对while
的测试加倍了:
x
或
do {
let x = getPoint()
if (x && x < limit) {
data.push(x)
}
} while(x && x < limit)
或
while (true) {
let x = getPoint()
if (!x || x >= limit) {
break;
}
data.push(x)
}
答案 0 :(得分:2)
您可以考虑使用for循环更改while循环:
var limit = 3;
var r = 2;
var data = [];
function getPoint() {
return r++;
}
for (let x=0; (x = getPoint()) && x < limit;) {
data.push(x)
}
console.log(typeof(x) === 'undefined' ? 'undefined' : x, 'x should be undefined here')
答案 1 :(得分:1)
{...}
您可以使用“裸” 代码块{…}
将变量隔离到“本地范围” 。
{
// do some job with local variables that should not be seen outside
let message = "Hello";
alert(message); // Hello
}
alert(message); // Error: message is not defined
针对您的情况:
const limit = 3;
let y = 0;
const getPoint = () => y++;
{
let x = 0;
while ((x = getPoint()) && x < limit) {
console.log(x);
}
}
console.log(x, 'x should be undefined here');
该块外部(或另一个脚本内部)的代码在该块内部看不到变量,因为该块具有其自己的词法环境。
(function {...})
您可以使用为此目的使用的所谓的“立即调用的函数表达式” (缩写为 IIFE )。
它们看起来像这样:
(function() {
let message = "Hello";
alert(message); // Hello
})();
针对您的情况:
const limit = 3;
let y = 0;
const getPoint = () => y++;
(function () {
let x = 0;
while ((x = getPoint()) && x < limit) {
console.log(x);
}
})();
console.log(x, 'x should be undefined here');
在这里创建一个 Function Expression 并立即调用。因此,代码立即执行并具有自己的私有变量。
函数表达式用括号(function {...})
括起来,因为当JavaScript在主代码流中遇到“ function” 时,它就将其理解为功能声明。