javascript - 为什么我不能为块内的变量分配新值?
问题描述
下面我有两个代码示例。它们是相同的,除了我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
可靠地设置这个变量,我正试图找出原因。
解决方案
这是因为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);
}
}
}
推荐阅读
- docker - Google Cloud Build - Dockerfile 和 cloudbuild.yaml 的不同范围
- python - 我一直在用 Python 搞乱这个布隆过滤器结构。我如何解决它?
- python - 姜戈。如何在网址中发送非英文单词?
- r - 在 R 和 RStudio 中加载包会导致找不到图像错误
- ocaml - 当我要求使用 ocamlopt 时,为什么沙丘使用 ocamlc?
- sql - 在 impala 中创建 UDF
- java - JerseyClient 如何处理异步回调?
- javascript - 通过特定父组件内的路径渲染反应组件
- parsing - 书签解析问题
- swift - CoreData - 当我从列表视图中删除核心日期实体时,它会重新出现在列表空白中