【问题标题】:How do browsers handle multiple function declarations with the same name?浏览器如何处理同名的多个函数声明?
【发布时间】:2012-03-15 04:17:31
【问题描述】:

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

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

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

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

还有一个

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

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

谢谢, j

【问题讨论】:

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


    【解决方案1】:

    在 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 似乎在自己修剪额外的实例。
    【解决方案2】:

    在这种特殊情况下:

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

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

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

    【讨论】:

    • 对不起,我并不是要在函数和函数名之间包含 = 符号。
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2015-05-24
    • 2016-01-21
    • 1970-01-01
    • 2011-12-30
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多