3

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

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

我们的 CMS 创建了单个“小部件”的多个实例,该“小部件”由

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

和一个

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

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

谢谢,j

4

2 回答 2

3

在 javascript 中,(几乎)一切都是对象,包括函数。话虽如此,覆盖函数定义的工作方式与覆盖变量完全相同。

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

myFunc(); // alerts '1'

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

myFunc(); // alerts '2'

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

请注意,声明一个已经声明的变量不是一个好的做法,许多代码质量工具(jslint、jshint 等)会警告您。

于 2012-03-14T19:32:45.877 回答
1

在这种特殊情况下:

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

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

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

于 2012-03-14T19:15:13.380 回答