我有一个 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 () {}) 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 函数:精彩部分》一章。
函数是内存中的数据,因此当您定义另一个同名函数时,它会覆盖前一个函数。
很明显,你不应该定义同一个函数两次。然而,当您这样做时,后一个定义是唯一适用的。尽量不要这样做。除了给两个函数赋予相同的名称之外,寻找另一种方法。
第二个函数替换了第一个函数,您始终可以通过修改函数名称来更改它,如果没有,您可以添加多个参数..如果需要的话...以及对此行为的解释,与其他编程不同语言 javascript 在执行时不会返回任何错误。所以你可以假设它只是在执行过程中通过覆盖函数来纠正自身。