以下代码段是否完全相同?如果没有什么是尊重?
var x = (function() {
... //a
return function(){
... //b
};
})();
VS
var x;
{
... //a
x = function(){
... //b
};
}
答案 0 :(得分:6)
存在一个主要区别:在JavaScript中,块不会引发新的变量范围。因此,您无法在// a
代码块中定义私有变量。比较
var x = (function() {
var v = 42;
return function(){
return v;
};
})();
// v; would yield ReferenceError: v is not defined, so you need to call x
和
var x;
{
var v = 42;
x = function(){
return v;
};
}
// v is 42 here, that's not what's intended.
答案 1 :(得分:0)
一个主要区别是,在执行...//a
时,x不存在。现在在你的情况下,在两种情况下它都是undefined
,但一般来说在...//a
期间可以访问x变量,而在第一种情况下它不是。{/ p>
否则在你的情况下它是完全相同的。在你的情况下,代码基本上被重构为一个单独的函数,就像在任何其他语言中一样。