可以在函数体中向JavaScript函数添加属性吗?

可以在函数体中向JavaScript函数添加属性吗?,javascript,Javascript,我知道你可以做到这一点: var someFunc = function(){ //do something } someFunc.newProperty = "blah"; 然而,这似乎不是做同样的事情 var someFunc = function(){ var newProperty = "blah"; //do something } 在第二种情况下,如果我尝试调用someFunc.newProperty,它似乎不会返回“blah”。区别是什么?在第一种情况下

我知道你可以做到这一点:

var someFunc = function(){
    //do something
}
someFunc.newProperty = "blah";
然而,这似乎不是做同样的事情

var someFunc = function(){
    var newProperty = "blah";
    //do something
}

在第二种情况下,如果我尝试调用someFunc.newProperty,它似乎不会返回“blah”。区别是什么?

在第一种情况下,newProperty是someFunc对象的属性。在第二种情况下,newProperty是一个局部变量,这意味着它在函数执行期间被放置在堆栈上,然后消失

有什么区别

在第一种情况下,您将分配一个。在第二种情况下,您在函数内部定义了一个,它仅在函数执行时存在。局部变量不会神奇地成为函数对象的属性


如果为函数指定名称,则可以轻松地为其指定属性:

var someFunc = function name() {
    name.newProperty = "blah";
    //do something
}
但在函数执行之前,属性仍然不存在。所以

someFunc.newProperty;
不起作用,但是

someFunc();
someFunc.newProperty;

是的。

这看起来像是XY问题。。。你到底想通过这种方式达到什么目的?我可以给你一个不同的解释,但我不认为这会帮助你解决你的整体问题。
var newProperty
声明了一个局部变量,而不是属性。我的问题源于Angular希望用注入依赖项注释函数的方式。在Angular中定义带注释的函数时,可以使用依赖项数组设置函数的$inject属性。另一种方法是将其内联指定为包含依赖项和匿名内联函数的数组。我试图理解为什么我不能在匿名函数体中指定$inject属性,而不是内联声明它。我想我现在从费利克斯的回答中明白了。我还使用了Typescript,这使得它更难理解。