0

我一直在做这样的事情,但我从未见过任何错误。但是,不幸的是,我一直无法解释为什么会这样。

第一行创建一个指向函数的变量。第二行只是添加func2func1以点分隔并定义一个函数。

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

func1.func2 = function(){};

错误

SyntaxError: missing ; before statement

var func1.func2 = function(){};

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

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

4 回答 4

2

变量语句的一种形式是:

var identifier [optional assignment];

变量语句中的标识符必须符合标识符名称的规则,其中之一是它们不能包含“。” 特点。所以:

var func1 [...]; 

可以,但是:

var func1.func2 [...]; 

不是。解释器停在标识符处,因为它是一个语法错误,就是这样,它不能继续分配。

于 2013-11-11T22:44:34.863 回答
1
func1.func2 = function(){};

如果func1未定义,您正在尝试访问undefined导致引发异常的属性。

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

JavaScript 语法不允许在变量名中插入点,因此解释器会返回语法错误错误。

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

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

于 2013-11-11T22:44:49.303 回答
1

func1两条线上的函数。您可以使用以下方式确认typeof

var func1 = function(){};
typeof func1; // "function"
func1.func2 = function(){};
typeof func1; // "function"
于 2013-11-11T22:30:32.847 回答
1

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

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

匿名函数没有名称,但它仍然是函数对象,因此:

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

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

于 2013-11-11T22:31:57.710 回答