![](/img/trans.png)
[英]What is the benefit of assigning a self executing anonymous function to a variable in 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
的屬性無關。
預期的行為是可以理解的。 這是因為函數在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.