![](/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.