在JavaScript中,你可以在一堆不同的方式定義功能:爲什麼局部變量名稱優先於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優化。但是有沒有解釋這種行爲的技術解釋?
謝謝,這就是爲什麼我愛得如此。 – fredrik