浏览器如何处理具有相同名称的多个函数声明?

时间:2012-03-14 19:12:34

标签: javascript multiple-instances function-declaration browser-bugs

浏览器如何处理具有相同名称的多个函数声明?

具体测试用例如下 - 注意:我知道允许服务器脚本创建多个具有相同名称的函数声明是没有意义的,但我很好奇所以请在回答之前意识到这一点。这纯粹是为了进行行为研究。

我们的CMS创建了一个由

组成的单个“小部件”的多个实例
<div class="targetMeWithThis"></div>

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

当服务器呈现一个页面上有这个小部件的多个实例时,浏览器如何决定使用哪个javascript函数?是否有任何浏览器实际为每个创建单独的对象(函数)?

谢谢, Ĵ

2 个答案:

答案 0 :(得分: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等)会向您发出警告。

答案 1 :(得分:1)

在这个特定的例子中:

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

浏览器将抛出错误,因为function是保留关键字。

给定一个不同的变量名,那么您只需为(全局)变量赋值。每次连续执行小部件脚本时,该变量都将被一个新的(相同的)函数覆盖。