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

3

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

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

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

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

并且一个

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

当服务器呈现一个具有多个此小部件实例的页面时,浏览器如何决定使用哪个JavaScript函数?是否有任何浏览器实际上为每个函数创建单独的对象(函数)?
谢谢, j
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等)都会对此发出警告。


确实。我非常好奇是否有任何主要的浏览器会处理这些内容不正确或以意外的方式。幸运的是,看起来我们的CMS正在自行修剪额外的实例。 - user1226337

1
在这个特定的情况下:
function = startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}

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

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


抱歉,我不是想在函数和函数名之间包含等号符号。 - user1226337

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接