关于javascript

时间:2015-08-01 08:57:11

标签: javascript

我是javascript的新手所以请理解这个问题是否有点幼稚。 我听说函数也是javascript中的对象。这意味着函数也可以具有对象等属性。所以我尝试了这个:

var foo=function(){
        var v1=1;
        console.log(foo.v1);
    };
    foo();

此输出为undefined。我不明白发生了什么。因此,当我在函数v1中声明变量foo时,根据结果v1不是函数对象foo的属性。如果不是前者那它的属性是什么?有人可以向我解释发生了什么吗?

2 个答案:

答案 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