【发布时间】:2021-12-10 09:20:48
【问题描述】:
我遇到了一些我认为与范围相关的奇怪行为,但我无法解释为什么会发生这种情况。
所以这是有问题的代码。我正在尝试对一些单词进行 Camel Case 并区分由破折号和下划线分隔的文本。忽略算法还不完全正确的事实,这不是重点。这是我注意到问题的阶段。
function toCamelCase(str){
let isDash = false
for (let char in str) {
if (char === "-") {
isDash = true
}
}
if (isDash) {
return str.split("-").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("")
} else {
return str.split("_").map(word => word[0].toUpperCase() + word.slice(1, word.length + 1)).join("")
}
}
let result = "why-false"
console.log(toCamelCase(result))
所以 isDash 确定文本包含哪种类型的分隔符。我显然可以使用箭头函数而不是这种方法,它会完美地工作。像这样的:
let isDash = () => {
for (let char in str) {
if (char === "-") {
return true
}
但我不明白为什么前面的例子不能正常工作。我已经阅读了范围,如果它是在更高级别定义的,应该可以重新分配给该变量。即使我在函数之外定义了 isDash,它仍然不起作用。它的值始终保持初始值:false。为什么 if 语句不将其值更改为 true?
let x = [1, 4, 5, 7]
let txt = 0
let working = "no"
for (let i in x) {
txt += x[i]
if (txt > 4) {
working = "yes"
}
}
console.log(working)
如您所见,如果我写一些类似的东西来演示是否可以在嵌套的 if 语句中使用该变量,它工作正常并且工作将记录是。我在这里想念什么?我真的很感激一些帮助,这对我来说真的是一个死胡同,如果我自己能弄清楚,我就不会寻求帮助。非常感谢任何可以向我解释这些东西的人!
【问题讨论】:
-
FWIW,在未来,首先要做的是检查您的假设:您是否已登录或使用调试器来实际检查
char中的内容?这应该始终是第一步。 -
感谢您的建议!我现在几乎是个菜鸟,所以我不知道如何使用调试器,但我今天会看一些教程并了解它的一切。
标签: javascript node.js if-statement scope variable-assignment