如果在运行时使用eval在javascript中进行条件评估

时间:2018-12-17 11:25:56

标签: javascript scope eval

 var y = 1;

 if (function f(){}) {
   y += typeof f;
 }
 console.log(y);

此代码的输出为1undefined。我知道在运行时使用ifeval语句中的条件进行评估的原因,但是我不明白为什么它不输出1function

3 个答案:

答案 0 :(得分:0)

您需要在if括号之外定义函数,如果不是,则f的范围仅限于条件内部。 如果您这样修改:

var y = 1;
//Pick One:
var f = () => {}; //If you are using ES6

function f() {}; //If you are not using ES6

if (f) {
  y += typeof f;
}

console.log(y); // 1function

答案 1 :(得分:-1)

在您的示例中,该函数仅作用于user=abc;domain=CPD.Intr.Service;useNTLMv2=true语句的测试条件的括号内。

尝试以下操作:

if

您可以在if测试中定义函数的指针是否在外部定义。

  var y = 1;
  var f = function() { };
  if (f) {
    y += typeof f;
  }
  console.log(y)

答案 2 :(得分:-1)

在if语句的条件内使用function x() {}表示法定义的函数在if语句的花括号内不可用。试试:

if (function f() {return 20;}) {
  console.log(f);
}

对我来说(在Safari或Node REPL中),这会引发ReferenceError,因为它找不到f,因为在该范围内未定义f