我知道这可能有一个非常简单的答案,但我似乎无法弄明白。
我需要根据进入函数的参数值来定义变量的内容。
问题在于,当我在if
内设置我的值时,我得到ReferenceError: newval is not defined
以下是运行错误的代码的简化版本:
const myMessage = (recipientId, msg, miller) => {
const tip = 1;
if (tip===1)
{
console.log("in here");
const newval = "some value";
}
console.log("executes this");
const send = newval;
当我检查控制台时,我在in here
消息之前得到execute this
。这就是为什么我不确定为什么send
不知道newval
是什么。
任何正确方向的提示都将受到赞赏, 感谢
答案 0 :(得分:10)
let
不同, const
和var
都是明显的块范围,所以你不能在周围的块之外引用它们( not功能):
function scopes() {
if (true) {
var foo = 'visible';
let bar = 'not visible';
console.log(foo, bar); // both foo and bar are visible
}
console.log(foo, bar); // foo is visible, bar is not
}
console.log(foo, bar); // neither foo nor bar are visible
如果要将const
设置为分支的结果,请尝试将分支移动到一个小函数并调用:
function getNewValue(tip) {
if (tip === 1) {
// do stuff
return "some value";
} else {
// do other stuff
return "other value";
}
}
const tip = 1;
const send = getNewValue(tip);
答案 1 :(得分:1)
通常你会在块上面声明let和const(如果你需要在块之外)
不要忘记 const 和让是块级别,也不会被提升。 var 是范围级别并已提升。
如果您不熟悉,这里有一个关于吊装的好链接: http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/
'use strict';
const myMessage = (recipientId, msg, miller) => {
const tip = 1;
let newval;
if (tip === 1) {
console.log("in here");
newval = "some value";
}
console.log("executes this");
const send = newval;
}
myMessage()