在 JavaScript 中,您可以通过多种不同的方式定义函数:
function BatmanController () {
}
var BatmanController = function () {
}
// If you want to be EVIL
eval("function BatmanController () {}");
// If you are fancy
(function () {
function BatmanController () {
}
}());
今天偶然遇到了一个意想不到的行为。当声明一个与函数同名的局部变量(以花哨的方式)时,局部变量出现在局部范围内。例如:
(function () {
"use strict";
function BatmanController () {
}
console.log(typeof BatmanController); // outputs "function"
var RobinController = function () {
}
console.log(typeof RobinController); // outputs "function"
var JokerController = 1;
function JokerController () {
}
console.log(typeof JokerController); // outputs "number", Ehm what?
}());
有谁知道为什么var JokerController
不被覆盖function JokerController
?我在 Chrome、Safari、Canary、Firefox 中对此进行了测试。我猜这是由于在 V8 和 JägerMonkey 引擎中完成的一些“前瞻性”JavaScript 优化。但是有什么技术解释可以解释这种行为吗?