为什么我不能在JavaScript while循环之外设置变量的值?

为什么我不能在JavaScript while循环之外设置变量的值?,javascript,while-loop,Javascript,While Loop,我正在尝试解决一个二进制挑战,它需要在数组的开始和结束之间设置一个中间点 代码如下: function binary (val, nums) { var start = nums[0]; var end = nums.length -1; var found = false; var mid = Math.floor((start + end)/2); var position = -1; while(!found && start <= end)

我正在尝试解决一个二进制挑战,它需要在数组的开始和结束之间设置一个中间点

代码如下:

function binary (val, nums) {
  var start = nums[0];
  var end = nums.length -1;
  var found = false;
  var mid = Math.floor((start + end)/2);
  var position = -1;

  while(!found && start <= end) {
    if (nums[mid] === val) {
        found = true;
        position = mid;  
    }
    else if (nums[mid] > val) {
       end = mid -1;

    }
    else {
        start = mid + 1;
    }
  }
return position;
}

console.log(binarySearch(12, [1,2,3,4,5,6,7,12]))
函数二进制(val,nums){
var start=nums[0];
var end=nums.length-1;
var=false;
var mid=数学楼层((起点+终点)/2);
var位置=-1;
while(!found&&start val){
结束=中间-1;
}
否则{
开始=中间+1;
}
}
返回位置;
}
log(二进制搜索(12[1,2,3,4,5,6,7,12]))
控制台不返回任何内容,但函数也不会停止。但是,如果我在循环外声明var mid,然后在循环内这样设置值

var mid;

while(!found && start <= end) {
    mid = Math.floor((start+end)/2)
    if (nums[mid] === val) {
        found = true;
        position = mid;  
    }
    else if (nums[mid] > val) {
       end = mid -1;

    }
    else {
        start = mid + 1;
    }
}
var-mid;
while(!found&&start val){
结束=中间-1;
}
否则{
开始=中间+1;
}
}

它返回正确的值。这是为什么?

在第一个代码段(while循环外部)中,您永远不会更改中间值,而在第二个代码段中,您在每次迭代中都会根据开始值和结束值以及结果的差异来更新中间值。

在开始时设置一次中间点,并且在每次迭代时根据更新的开始值和结束值将其反复设置为不同的值肯定会导致不同的结果,不是吗?
二进制
函数显然应该在
while
循环的每次迭代中计算
中间
值。