我是javascript的新手所以请理解这个问题是否有点幼稚。 我听说函数也是javascript中的对象。这意味着函数也可以具有对象等属性。所以我尝试了这个:
var foo=function(){
var v1=1;
console.log(foo.v1);
};
foo();
此输出为undefined
。我不明白发生了什么。因此,当我在函数v1
中声明变量foo
时,根据结果v1
不是函数对象foo
的属性。如果不是前者那它的属性是什么?有人可以向我解释发生了什么吗?
答案 0 :(得分:1)
你在Javascript函数中是一个对象。您可以在函数对象中具有属性,示例是链接长度等。
根据结果v1不是function-object foo的属性。
v1只是函数foo中定义的变量,它不是属性。
要添加属性,您可以使用foo.v1 = "1"
将属性v1添加到对象foo。
如果使用console.log(v1)而不是console.log(foo.v1)。您将看到输出1.此处您正在访问函数内的局部变量。
您可能认为var foo已经是一个对象,为什么我无法在函数内访问它?这是因为这两个foo变量在不同的范围内。您可能想要了解有关函数scope
的更多信息答案 1 :(得分:0)
对象属性和变量不是一回事。函数可以包含局部变量(包括函数参数)和属性:
function foo () {
v1 = 1; // this is a local variable
return [
v1, // local var above
foo.v2 // object property
]
}
foo(); // returns [1,undefined]
foo.v2 = 2;
foo(); // returns [1,2]
所以你看,函数确实是对象。但函数内部的变量与函数是对象无关。
旁注:事实上,函数是第一类对象,并且函数可以匿名定义(没有名称)是两个不同的特性。例如,在C中,函数也是第一类对象 - 也就是说,您可以将它们分配给函数指针。但是在C语言中,你无法在没有名字的情况下声明函数。
function bar() {}
b = bar; // this demonstrates that functions are first-class objects
c = function(){}; // this demonstrates that functions can be anonymous