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

Why am I able to define same function twice in javascript?

本文关键字:两次 函数 我可以 javascript 定义 为什么      更新时间:2023-09-26

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

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

当我调用getngScope()时,我收到了"1"警报,并返回了作用域。为什么它会有这种行为?

Object的第二个定义覆盖第一个定义。通常,对象的最后一个定义会覆盖以前的所有定义。

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中的函数:好的部分》一章。

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

很明显,同一个函数不应该定义两次。然而,当您这样做时,后一个定义是唯一适用的1。尽量不要那样做。找到另一种方法,而不是给两个函数取相同的名称。

第二个函数取代了第一个函数,您可以通过修改函数名称来更改它,如果不修改,您可以添加多个参数。。如果需要的话。。。为了解释这种行为,与其他编程语言不同,javascript在执行时不会返回任何错误。。因此u可以假设它只是在执行过程中通过重写函数来纠正自己。