2

瀏覽器如何處理具有相同名稱的多個函數聲明?瀏覽器如何處理具有相同名稱的多個函數聲明?

具體測試案例如下 - 注:我知道這是沒有意義的,以允許服務器腳本創建多個函數聲明具有相同的名稱,但我很好奇,所以請在回答之前意識到這一點。這純粹是爲了行爲研究。

我們的CMS創造了一個單一的「小部件」是由一個

<div class="targetMeWithThis"></div> 

和多個實例的

function startWidgetFunction() { 
var param1 = $server.Variable1 
var param2 = $server.Variable2 
var param3 = $server.Variable3 
} 

當服務器將呈現小部件具有的這種多個實例的頁面它,瀏覽器如何決定使用哪個JavaScript函數?是否有任何瀏覽器爲每個實際創建單獨的對象(函數)?

感謝, Ĵ

回答

2

在javascript中,(幾乎)一切都是一個對象,包括函數。這就是說,覆蓋函數定義與覆蓋變量完全相同。

var myFunc = function() { 
    alert('1'); 
}; 

myFunc(); // alerts '1' 

var myFunc = function() { 
    alert('2'); 
}; 

myFunc(); // alerts '2' 

http://jsfiddle.net/KgKgf/3/

注意,聲明已聲明的變量是不是一個好的做法和許多代碼質量工具(JSLint的,jshint等)會向您發出警告。

+0

確實。我很想知道任何主流瀏覽器是否錯誤地或以意想不到的方式處理了這些問題。幸運的是,它看起來好像我們的CMS自己修剪額外的實例。 – user1226337 2012-03-15 16:48:17

1

在這種特定情況:

function = startWidgetFunction() { 
var param1 = $server.Variable1 
var param2 = $server.Variable2 
var param3 = $server.Variable3 
} 

因爲function是保留關鍵字,瀏覽器將拋出一個錯誤。

給定一個不同的變量名,那麼你只是給一個(全局)變量賦值。在每次連續執行小部件腳本時,變量將被新的(相同)函數覆蓋。

+0

對不起,我不打算在函數名和函數名之間加上=號。 – user1226337 2012-03-14 20:17:00

相關問題