2013-12-09 83 views
-2

如果我写:初学者:有关链接

var headerDiv = document.createElement('div').appendChild(document.createTextNode('Chapter 1')); 

什么变量headerDiv点,股利或文本节点?

+3

这是一个诡计的问题吗?答:也没有。变量的值将是'undefined',因为你得到一个类型错误:'TypeError:不能调用'undefined'的方法'createTextNode'。 –

+3

如果您在询问之前检查,该怎么办? SO不是一个在线的JS评估者 – zerkms

+0

嗯......我想知道你是否打算链接'.appendChild()'作为一个arg的文本节点?或者,也许'文件'是为了'.ownerDocument'? –

回答

1

也许这个例子选择不好,所以我会尝试给出一个基于不同例子的答案。想象一下你有这样的代码:

var foo = func1(); 
var bar = foo.func2(); 
var baz = bar.func3(); 

这里我们将每个函数调用的结果存储在一个变量中。如果您想在多个地方重复使用计算结果,这非常有用。

但是,如果你需要的结果只有一次,你可以替换与计算的值表达式的变量名:

var bar = (func1()).func2(); // bar -> func1() 
var baz = bar.func3(); 

我们当然可以为bar再次做到这一点:

var baz = ((func1()).funct2()).func3(); 

这会在开始时创建与代码相同的结果。只是不用保存中间步骤的结果,而是立即使用它们。包装子表达式的括号在这里不是必要的,因此整个表达式可以简化为:

var baz = func1().funct2().func3(); 
0

您不应该链接那样的函数。 document.createElement('div')将返回它创建的div元素。 document.createTextNode('Chapter 1')将返回它创建的文本节点。当你写它时,div会尝试调用一个名为document的函数,该函数不存在。相反写:

var headerDiv = document.createElement('div'), 
    textNode = document.createTextNode('Chapter 1');