在这里创建函数foo
时,我引用了一个fromTheFuture
尚未声明的变量。这实际上按预期工作,但为什么呢?它被认为是危险的还是不好的做法?
var foo = function(x) {
return fromTheFuture * x;
};
var fromTheFuture = 5;
console.log(foo(10));
我可以看到这非常方便,如果您有几个想要以循环方式相互使用的函数 - 而不必var
在方法的开头声明它们。
在这里创建函数foo
时,我引用了一个fromTheFuture
尚未声明的变量。这实际上按预期工作,但为什么呢?它被认为是危险的还是不好的做法?
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));
foo(10)
如果你以前打电话fromTheFuture=5
,你会得到NaN
。
是的,首先处理整个脚本,将变量添加到“数据存储”中,然后才执行执行。
但是,不鼓励这样做,因为它会使代码难以阅读。如果您想了解更多关于 javascript 代码质量的信息,请查看jslint。这是 js 的一种 FxCop。尝试在那里复制粘贴您的代码。
在javascript中隐藏它的原因它首先定义所有变量,然后开始初始化,然后如果某个地方需要它的初始化点,它会尝试先初始化调用一个