未在'if'中识别的未定义变量

时间:2016-06-02 17:23:10

标签: javascript node.js

我知道这可能有一个非常简单的答案,但我似乎无法弄明白。

我需要根据进入函数的参数值来定义变量的内容。

问题在于,当我在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是什么。

任何正确方向的提示都将受到赞赏, 感谢

2 个答案:

答案 0 :(得分:10)

let不同,

constvar都是明显的块范围,所以你不能在周围的之外引用它们( 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()