浏览器如何处理多个同名函数声明?
具体测试用例如下 - 注意:我知道允许服务器脚本创建多个具有相同名称的函数声明是没有意义的,但我很好奇,所以请在回答之前意识到这一点。这纯粹是为了行为研究。
我们的 CMS 创建单个“小部件”的多个实例,该“小部件”由
<div class="targetMeWithThis"></div>
和一个
function startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}
当服务器渲染的页面上有该小部件的多个实例时,浏览器如何决定使用哪个 JavaScript 函数?是否有浏览器实际上为每个浏览器创建单独的对象(函数)?
谢谢, j
在 javascript 中,(几乎)一切都是对象,包括函数。话虽这么说,覆盖函数定义的工作原理与覆盖变量完全相同。
var myFunc = function () {
alert('1');
};
myFunc(); // alerts '1'
var myFunc = function () {
alert('2');
};
myFunc(); // alerts '2'
请注意,声明一个已声明的变量并不是一个好的做法,许多代码质量工具(jslint、jshint 等)会对此发出警告。
在这个特定的例子中:
function = startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}
浏览器会抛出错误,因为
function
是保留关键字。
给定不同的变量名称,那么您只需为(全局)变量分配一个值。每次连续执行小部件脚本时,该变量将被新的(相同)函数覆盖。