[英]Why am I able to define same function twice in javascript?
我有一個 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'
函數的第二個定義優先。
我建議你閱讀 JavaScript 中的函數一章:Crockford 的好部分。
函數是內存堆棧中的數據,因此當您定義另一個同名函數時,它會覆蓋前一個函數。
很明顯,您不打算兩次定義相同的函數。 但是,當您這樣做時,后一個定義是唯一適用的定義。 盡量不要那樣做。 除了給兩個函數同名之外,找到另一種方法。
第二個函數取代了第一個函數,您可以隨時通過修改函數名稱來更改它,如果不是,您可以添加多個參數..如果需要的話...以及對這種行為的解釋,與其他編程語言不同javascript 在執行時不會返回任何錯誤..所以你可以假設它只是在執行過程中通過覆蓋函數來糾正自己。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.