为什么我可以在 javascript 中定义两次相同的函数?

问题描述 投票:0回答:4

我有一个 javascript 文件,在其中编写了一堆 jquery 函数。 我有一个返回角度范围的函数。我发现如果我将同一个函数编写两次,代码仍然会执行。

function getngScope()
{
    alert(2);
    return angular.element($('#data-area')).scope();
}

function getngScope()
{
    alert(1);
    return angular.element($('#data-area')).scope();
}

当我拨打

getngScope()
时,我会收到“1”警报并返回范围。为什么会有这种行为?

javascript function overwrite
4个回答
9
投票

对象的第二个定义会覆盖第一个。一般来说,对象的最后一个定义会覆盖所有先前的定义。

JavaScript 中的函数是对象:

(function () {}) instanceof Object === true

当您创建一个新的全局函数

f
时,它相当于在
window
对象中创建一个属性并将函数定义分配给该变量,如果您创建一个函数:

function myFun() { console.log('my function') };

然后检查

window.myFun
的值,您会发现它与
myFun
具有相同的功能:

window.myFun === myFun // true

您还会注意到,修改

window.myFun
会更改/覆盖
myFun

例如

function myFun() { console.log('myFun') };
myFun(); // Prints: 'myFun'

// Overwrite myFun
window.myFun = function () { console.log('NoFun') };
myFun(); // Prints: 'NoFun'

函数的第二个定义优先。

我建议您阅读 Crockford 的《JavaScript 函数:精彩部分》一章。


0
投票

函数是内存中的数据,因此当您定义另一个同名函数时,它会覆盖前一个函数。


-1
投票

很明显,你不应该定义同一个函数两次。然而,当您这样做时,后一个定义是唯一适用的。尽量不要这样做。除了给两个函数赋予相同的名称之外,寻找另一种方法。


-1
投票

第二个函数替换了第一个函数,您始终可以通过修改函数名称来更改它,如果没有,您可以添加多个参数..如果需要的话...以及对此行为的解释,与其他编程不同语言 javascript 在执行时不会返回任何错误。所以你可以假设它只是在执行过程中通过覆盖函数来纠正自身。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.