簡體   English   中英

為什么我可以在 javascript 中定義相同的函數兩次?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM