为什么我可以引用Javascript中尚未定义的变量?

为什么我可以引用Javascript中尚未定义的变量?,javascript,Javascript,在这里创建函数foo时,我引用了一个变量,该变量来自于尚未声明的未来。这实际上和预期的一样有效,但为什么呢?这被认为是危险的还是不好的做法 var foo = function(x) { return fromTheFuture * x; }; var fromTheFuture = 5; console.log(foo(10)); 不过,我认为这非常方便,如果您有几个函数希望以循环方式相互使用,而不必在方法的开头用var声明它们。调用foo时,定义了fromTheFuture。更准确

在这里创建函数foo时,我引用了一个变量,该变量来自于尚未声明的未来。这实际上和预期的一样有效,但为什么呢?这被认为是危险的还是不好的做法

var foo = function(x) {
  return fromTheFuture * x;
};

var fromTheFuture = 5;

console.log(foo(10));
不过,我认为这非常方便,如果您有几个函数希望以循环方式相互使用,而不必在方法的开头用var声明它们。

调用foo时,定义了fromTheFuture。更准确地说,由于吊装,您的代码基本上是:

var foo, fromTheFuture;
foo = function(x) {return fromTheFuture*x;};
fromTheFuture = 5;
console.log(foo(10));
如果在fromTheFuture=5之前调用foo10,则会得到NaN。

调用foo时,定义了fromTheFuture。更准确地说,由于吊装,您的代码基本上是:

var foo, fromTheFuture;
foo = function(x) {return fromTheFuture*x;};
fromTheFuture = 5;
console.log(foo(10));
如果在fromTheFuture=5之前调用foo10,则会得到NaN。

是的,首先处理整个脚本,将变量添加到数据存储,然后执行

但是,不鼓励这样做,因为这样会使代码难以阅读。如果您想了解更多关于javascript代码质量的信息,请查看。这是js的一种FxCop。尝试将代码复制粘贴到其中。

是的,首先处理整个脚本,将变量添加到数据存储中,然后执行


但是,不鼓励这样做,因为这样会使代码难以阅读。如果您想了解更多关于javascript代码质量的信息,请查看。这是js的一种FxCop。尝试复制粘贴您的代码。

推理机在javascript中首先定义所有变量,然后开始初始化,如果在某个地方需要初始化点,则首先尝试初始化,称为一个。

推理机在javascript中首先定义所有变量,然后开始初始化,然后在if之后在某个地方,它需要它的初始化点,它尝试初始化,称为“先定义一个”,是的,但它如何知道它将在将来某个时候被声明和定义?然而,当用这种提升效果重写时,它是有意义的。提升的可靠性如何?它在每个浏览器中都能工作吗?它总是能工作吗?Javascript代码在运行之前经过充分的分析和处理。许多系统甚至将其编译成字节码的形式。但要回答您的问题,变量声明是语言的一部分,并且100%可靠。然而,许多人认为,最好尽早手动将声明放在一起,以避免混淆和/或将声明分组以便于可读性。Defined,是的,但它如何知道将来某个时候会声明和定义它呢?然而,当用这种提升效果重写时,它是有意义的。提升的可靠性如何?它在每个浏览器中都能工作吗?它总是能工作吗?Javascript代码在运行之前经过充分的分析和处理。许多系统甚至将其编译成字节码的形式。但要回答您的问题,变量声明是语言的一部分,并且100%可靠。然而,许多人认为最好的做法是尽早手动放置声明,以避免混淆/和/或将声明分组以便于可读性。