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

相关问题