在JavaScript中限制条件中的分配范围

时间:2018-08-16 20:47:43

标签: javascript scope

以下代码将所有低于限制的点推入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)
}

2 个答案:

答案 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)

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');

该块外部(或另一个脚本内部)的代码在该块内部看不到变量,因为该块具有其自己的词法环境。

2。 IIFE (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” 时,它就将其理解为功能声明