2015-11-28 13 views
1

我有一个JavaScript文件,我写了一堆jQuery的功能。我有一个函数来返回角度范围。我发现如果我要写两次相同的函数,代码仍然会执行。为什么我能在javascript中定义两次相同的函数?

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

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

当我打电话给getngScope()我得到“1”警报和范围返回。为什么会有这种行为?

+0

当你写第二个,它有点替换第一个,所以这就是为什么它的发生 –

+1

你在做什么不被认为是在JavaScript错误。换句话说,这并不违反语言中的任何规则。 – Pointy

+1

你为什么要这么做?你不应该这样做! –

回答

0

很明显,你不打算定义两次相同的功能。但是,当你这样做时,后面的定义是唯一适用的定义。尽量不要那样做。寻找另一种方式,除了给两个功能相同的名称。

+0

我从来没有意识到,写一个新的函数将同名将覆盖第一个,在JS! –

+0

不只是在JS中,我曾经处理过的语言非常多。无论如何,你为什么要这么做?也许我可以建议另一种方法哟。 – Y2H

+0

@ Y2H好的Java和C肯定会在同一个上下文中抱怨两个同名的函数。 – Pointy

1

功能在内存堆栈数据,所以当你定义具有相同名称的另一个功能,它会覆盖前一个。

0

第二个功能取代了第一个功能,你总是可以通过修改函数的名称改变这一点,如果没有可以..如果是以往任何时候都需要添加多个参数和... ...的交代这种行为,不像其他编程语言,javascript不会在执行时返回任何错误。所以你可以假设它只是在执行过程中通过覆盖函数来纠正自己。

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功能上的一章。

相关问题