我有一个javascript文件,我在其中编写了一堆jquery函数。我有一个函数来返回角度范围。我发现如果我要写两次相同的函数,代码仍然会执行。
function getngScope()
{
alert(2);
return angular.element($('#data-area')).scope();
}
function getngScope()
{
alert(1);
return angular.element($('#data-area')).scope();
}
当我呼叫getngScope()
时,我收到“1”警报并返回范围。为什么会有这种行为?
答案 0 :(得分:2)
对象的第二个定义会覆盖第一个。通常,对象的最后一个定义会覆盖以前的所有定义。
JavaScript中的函数是对象:
(function () {}) instanceof Object === true
当你创建一个新的全局函数f
时,它等同于在window
对象中创建一个属性并将函数定义赋值给该变量,如果你创建一个函数:
function myFun() { console.log('my function') };
然后检查window.myFun
的值,您会注意到它与myFun
的功能相同:
window.myFun === myFun // true
您还会注意到修改window.myFun
会更改/覆盖myFun
。
E.g。
function myFun() { console.log('myFun') };
myFun(); // Prints: 'myFun'
// Overwrite myFun
window.myFun = function () { console.log('NoFun') };
myFun(); // Prints: 'NoFun'
该函数的第二个定义优先。
我建议你阅读关于JavaScript函数的章节:Crockford的好部分。
答案 1 :(得分:1)
函数是内存堆栈中的数据,因此当您定义另一个具有相同名称的函数时,它将覆盖前一个函数。
答案 2 :(得分:0)
很明显,你并不是要两次定义相同的功能。但是,当您这样做时,后一个定义是唯一适用的定义。尽量不这样做。找到另外一种方法,而不是给两个函数同名。
答案 3 :(得分:0)
第二个函数替换了第一个函数,你总是可以通过修改函数的名称来改变它,如果不是,你可以添加多个参数...如果需要的话...以及解释这个行为,不像其他编程语言javascript在执行时不会返回任何错误。所以你可以假设它只是在执行过程中通过覆盖函数来纠正自己。