1

在这里创建函数foo时,我引用了一个fromTheFuture尚未声明的变量。这实际上按预期工作,但为什么呢?它被认为是危险的还是不好的做法?

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

var fromTheFuture = 5;

console.log(foo(10));

我可以看到这非常方便,如果您有几个想要以循环方式相互使用的函数 - 而不必var在方法的开头声明它们。

4

3 回答 3

5

由时间foo被调用,fromTheFuture被定义。更准确地说,由于提升,您的代码本质上是:

var foo, fromTheFuture;
foo = function(x) {return fromTheFuture*x;};
fromTheFuture = 5;
console.log(foo(10));

foo(10)如果你以前打电话fromTheFuture=5,你会得到NaN

于 2012-09-08T15:13:11.333 回答
1

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

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

于 2012-09-08T15:27:36.423 回答
1

在javascript中隐藏它的原因它首先定义所有变量,然后开始初始化,然后如果某个地方需要它的初始化点,它会尝试先初始化调用一个

于 2012-09-08T15:27:53.637 回答