JavaScript块范围与功能
问题描述:
以下片段是否完全相同?如果没有什么尊重?JavaScript块范围与功能
var x = (function() {
... //a
return function(){
... //b
};
})();
与
var x;
{
... //a
x = function(){
... //b
};
}
答
有一个主要区别:在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.
答
一个主要的区别是,在执行...//a
时,X不存在。现在在你的情况下,在这两种情况下,它是undefined
,但通常来说,可能在...//a
期间访问x变量,而在第一种情况下不可以。
否则在你的情况下它是相同的。毕竟在你的情况下,代码基本上被重构为一个单独的函数,就像任何其他语言一样。
+2
还有一件事:'{var z = 1;}'将在窗口命名空间中创建一个变量z,而'(function(){var z = 2;}()) '不会污染全局名称空间。这就是为什么功能选项是首选 – 2011-04-30 11:28:31
@JohnS代码,请不要粘贴到标题这样。将您的代码发布到正文中。 – JohnP 2011-04-30 11:23:43
@JohnP你说的对,但是你的标题太笼统了,就像“我的代码有什么问题?” – 2011-04-30 11:24:43
@JohnS但这就是你问的。将代码粘贴到标题中并不能使其可读。随时为您的问题提出一个更好的问题陈述 – JohnP 2011-04-30 11:25:46