簡體   English   中英

將匿名函數分配給javascript中的變量

[英]Assigning an anonymous function to a variable in javascript

我正在google chrome瀏覽器上將這個javasrcipt代碼作為html腳本標簽運行。

<script type="text/javascript">
    var bar=function() {
        var name='tanzeel';
        console.log('inside a function');
    }
    console.log('My name is ' +bar.name);
</script>

我來自java和cpp背景。 我對oop的了解是,js中的函數被實例化為一個對象,這里的變量bar指向該對象。 因此,我可以訪問該對象的所有屬性。 然后為什么console.log('My name is ' +bar.name)正在打印My name is bar而不是字符串My name is tanzeel 請糾正我哪里我做錯了,還有什么我需要知道的。 謝謝。

您的變量可能是“指向”(dat cpp lingo;))到一個對象的,但是您不能隨心所欲地對待該對象。 在這種情況下,對象是函數,因此您不能將函數的主體視為具有常規類意義上的字段。

您獲得的輸出是函數的名稱。


要進行這項工作,必須使用new關鍵字實例化該對象。 您還必須為該類分配屬性才能訪問它們。

var bar=function() {
    this.name='tanzeel';
    //console.log('inside a function');
}
var b = new bar()
console.log(b.name);

這里有兩個獨立的問題。

首先,函數是對象,可以具有屬性。 在函數范圍內定義的變量與函數對象的屬性完全不同。 它們僅在函數運行時存在(盡管使用cf閉包),並且直接引用而不是與函數相關。

其次,函數可以有名稱。 通常,這來自函數表達式中的顯式名稱:

var bar = function foo () { };

…但是自從幾年前JS發生變化以來, 匿名函數表達式從分配給它們的變量中獲取名稱。

var bar = function () { };

函數內部有一個名為name的變量這一事實與該函數具有名為name的屬性無關。

將字符串tanzeel分配給變量name ,不要更改bar函數的name屬性。 相反,您只是在bar函數的詞匯環境中創建name變量。

console.log語句中的bar.name評估為bar因為該函數從其句法位置推斷出它

預期的行為是可以理解的。 這是因為函數在javascript中被視為對象。 每個對象都有一組屬性。 類似地,函數在其原型鏈中具有屬性name ,該屬性name的值等於函數的名稱。 在此處了解更多信息: https : //developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Function/name另外,請查看下圖中的控制台。 您可以在構造函數中看到一個name屬性。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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