javascript中的变量声明

时间:2013-11-11 22:17:41

标签: javascript

我这样做了一段时间,我从未见过任何错误。但是,不幸的是,我从来没有能够解释为什么这有效。

第一行创建一个指向函数的变量。第二行只是将func2添加到func1,用点分隔并定义一个函数。

如果我在var前面添加func1.func2,那么我会看到编译错误。

func1.func2 = function(){};

错误

SyntaxError: missing ; before statement

var func1.func2 = function(){};

第一行的func1是什么类型,第二行是什么类型。

var func1 = function(){};
func1.func2 = function(){};

4 个答案:

答案 0 :(得分:2)

variable statement的一种形式是:

var identifier [optional assignment];

变量语句中的标识符必须符合rules for identifier names,其中之一是它们不能包含“。”。字符。所以:

var func1 [...]; 

没关系,但是:

var func1.func2 [...]; 

不是。解释器停在标识符处,因为它是语法错误,就是这样,它无法继续进行赋值。

答案 1 :(得分:1)

func1两个行的函数。您可以使用typeof确认这一点:

var func1 = function(){};
typeof func1; // "function"
func1.func2 = function(){};
typeof func1; // "function"

答案 2 :(得分:1)

JavaScript中的函数也是一个对象,它可以具有以下属性:

function func1(){} // a function object
console.log(func1.name); //=> "func1"

匿名函数没有名称,但它仍然是一个函数对象,所以:

  

第1行的func1是什么类型,第2行是什么类型。

仍然是一个函数,属性func2包含另一个匿名函数。

答案 3 :(得分:1)

func1.func2 = function(){};

如果未定义func1,则您尝试访问undefined的属性,这会导致抛出异常。

var func1.func2 = function(){};
// SyntaxError: Unexpected token .

JavaScript语法不允许将点插入变量的名称,因此解释器返回语法错误错误。

var func1 = function(){};
func1.func2 = function(){};

javaScript中的函数是一个Function对象,因此,作为所有javascript objecta,可以在运行时动态地向其添加一个方法。所以func1是函数对象,func2是另一个函数对象。这是实现您想要做的事情的正确方法。