我正在读《秘密JavaScript忍者》这本书。该书说,如果您为变量分配匿名函数,则如果引用name属性,它将不包含变量的名称,但是如果引用此属性,则会看到它。
这怎么可能?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
</executions>
</plugin>
但是,如果我通过window对象的属性声明该函数,则该函数名会丢失
var canFly = function(){return true}
console.log(canFly.name)
为什么我从书中描述的第一句话不合适?
答案 0 :(得分:4)
根据MDN page about Function.prototype.name:
变量和方法可以从其语法位置推断出匿名函数的名称(ECMAScript 2015中的新增功能)。
似乎以obj.prop = ...
形式的属性分配声明函数不符合自动函数名称的定义:
var foo = {};
foo.prop = function() { return true; };
console.log(foo.prop.name); // ""
您可能正在阅读“ JavaScript忍者的秘密”的第一版(从2008年开始)。该版本是关于一个旧的JavaScript版本的,该版本现在已经过时了。那时甚至对变量的分配也不会导致自动函数名称定义(至少没有指定)。我强烈建议您获得第二版(2016)的副本,其中还包括ES2015中引入的功能。
答案 1 :(得分:0)
它是因为您在技术上没有为函数分配名称。底部代码段中的操作是声明window.isDeadly并将其分配给匿名函数。有关如何实现您的尝试的信息,请参见下文。
<tr *ngFor="let invoice of invoices | filter : [
{field:'number_invoice' , value:filterInvoice},
{field:'note_invoice' , value:filterInvoice},
{field:'customer_invoice' , value:filterInvoice},
{field:'payment_invoice' , value:filterInvoice}
]
paginate: { itemsPerPage: 10, currentPage: page }, index as i">