为什么不能在块内为变量分配新值?

时间:2018-08-17 20:43:45

标签: javascript variables for-loop if-statement

下面有两个代码示例。它们相同,除了我在开始时更改w的值。在任一示例中,m都有一个值。我要做的就是设置x = m。为什么我可以在第一个而不是第二个中这样做?我正在Chrome(68.0.3440.84)的控制台中对此进行测试

这有效(m = 100 | x = 100)

    var c = [],
    	w="word",
    	x = 0;
        for (l=0; l<w.length; l++){
        	c.push(w.charCodeAt(l));
        }
    
    for (i in c) {
    	if (c.length > 0) {
            var m = c[1];
            if (m > Math.min(m, c[i])) {
                m = Math.min(m, c[i]);
    			x = m; 
    			console.log(x);
            } 
        }
    }

这不起作用(m = 97 | x = 0):

    var c = [],
    	w="cancel",
    	x = 0;
        for (l=0; l<w.length; l++){
        	c.push(w.charCodeAt(l));
        }
    
    for (i in c) {
    	if (c.length > 0) {
            var m = c[1];
            if (m > Math.min(m, c[i])) {
                m = Math.min(m, c[i]);
    			x = m; //why cant I set this?
    			console.log(x);
            } 
        }
    }

我还想做更多的事情,但是在解决这个学习问题的过程中,我一直无法可靠地设置此变量x,并且试图找出原因。

1 个答案:

答案 0 :(得分:0)

这是因为从未满足if (m > Math.min(m, c[i]))条件。在您的示例中,mMath.min(m, c[i])具有相同的值。用>代替>=似乎可以解决您的问题。或将console.log移到if语句之外-取决于您实际要实现的目标。

var c = [],
  w = "cancel",
  x = 0;
for (l = 0; l < w.length; l++) {
  c.push(w.charCodeAt(l));
}

for (i in c) {
  if (c.length > 0) {
    var m = c[1];
    if (m >= Math.min(m, c[i])) { // because m > Math.min(m, c[i]) would return false
      m = Math.min(m, c[i]);
      x = m
      console.log(x);
    }
  }
}