首页 > 解决方案 > 为什么我不能为块内的变量分配新值?

问题描述

下面我有两个代码示例。它们是相同的,除了我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可靠地设置这个变量,我正试图找出原因。

标签: javascriptvariablesfor-loopif-statement

解决方案


这是因为if (m > Math.min(m, c[i]))条件永远不会满足。在您的示例中,两者都m具有Math.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);
    }
  }
}


推荐阅读