我认为这样做:
var what = function () {};
和这个
function what () {}
在JS中是一样的,因为函数应该是"第一类对象"。
今天我在Firefox中了解到这段代码:
var test = true;
if (test) {
function what () {
alert("foo");
}
} else {
function what () {
alert("bar");
}
}
what();
显示foo,并且因为奇怪的原因镀铬显示栏...为什么[第一]? 这样做:
var test = true, what;
if (test) {
what = function() {
alert("foo");
}
} else {
what = function () {
alert("bar");
}
}
what();
解决了问题..为什么[二号]? 你可以试试http://jsfiddle.net/7cbs5gr7/这里
[摘要]我有两个问题:
答案 0 :(得分:3)
声明类似
的功能what = function () {
alert("foo");
}
和
function what () {
alert("foo");
}
是两件不同的事情。
在第一种情况下,变量被提升,函数定义需要通过if
或else
中的那一点传递脚本执行。在第二种情况下,该函数刚刚声明,无论if
和else
中的条件如何,都可以从任何地方访问。
答案 1 :(得分:1)
可以使用//函数语句//(ECMA-262 Edition 3标准的允许扩展)或Function构造函数来有条件地定义函数。请注意,ES5严格不再允许此类函数语句。此外,此功能不能一致地跨浏览器工作,因此您不应该依赖它。