Javascript,函数范围和返回运算符

时间:2015-05-11 07:21:48

标签: javascript

我有一个简单的javascript函数,它将使用document.write编写函数外部的变量值并调用该函数。但是,代码不起作用:

var name = 'guru';
function type () {
  document.write = name;
}

然后我尝试返回document.write。但是,这也行不通。

var name = 'guru';
function type () {
  return document.write = name;
}
type();

在这段代码中,我只返回变量并在函数外部使用document.write。这很有效。

var name = 'guru';
function type () {
    return name;
}
document.write = type();

为什么会这样?有人可以向我解释一下吗?

修改

此处的代码在firebug中不起作用,因为HTML5文档之外的firebug不会将document.write识别为函数,请参阅图像中的错误。那就是如果你启动 firebug 并运行它并不起作用,但是如果它在HTML DOM中运行则这是一个错误,这是一个错误,或者这是它的工作方式。

firebug error

6 个答案:

答案 0 :(得分:3)

你不应该使用document.write,但如果绝对必须:

var writeSomething = function (message) {
    document.write(message);
}

如果您正在尝试调试,我建议您使用console.log。它受到所有现代浏览器的支持,并且更有用(它允许您检查对象,数组等)。 document.write的问题在于它会破坏当前文档以写入新信息(请参阅结尾处的注释)。

以下是此功能的使用示例:

var writeSomething = function (message) {
    document.write(message);
}

document.getElementById("myButton").onclick = function () {
    var message = document.getElementById("myMessage").value;
    writeSomething(message);
}
<button id="myButton">click me</button>
<input id="myMessage" placeholder="type message here">

来自MDN的

关于为什么document.write是否禁止

  

注意:当document.write写入文档时,在已关闭(已加载)的文档上调用document.write会自动调用document.open which will clear the document

TL;博士?像瘟疫一样避免document.write

答案 1 :(得分:2)

document.write是一个功能。 语法如下:

document.write(exp1,exp2,exp3,...)

参数是可选的。可以列出多个参数,它们将按发生顺序附加到文档

答案 2 :(得分:2)

document.writefunction,您需要call这样:

var myHtml = "<html><head></head><body><div><span>Hello World!</span></div></body></html>";

document.write(myHtml);

答案 3 :(得分:2)

一个。

function type() {
var name = 'guru';  
 document.write (name);
}

var name = 'guru';
  function type( text ) {
  document.write(text);

  }
  type( name );

你这样做了。看了一次,它可以帮助你站稳脚跟。

答案 4 :(得分:2)

执行document.write = name;时,您将覆盖该功能。

您必须使用它:document.write(message);

http://codepen.io/ces/pen/GJoxbX

答案 5 :(得分:2)

根据document.write syntax,您应该传递一个将是实际DOM字符串的参数。

通过

function type() {
return name;
}
document.write = type();

您实际上是否覆盖了原始document.write功能。现在,如果您致电document.write('foo'),您将获得Uncaught TypeError: document.write is not a function。 然而,使用document.write的正确方法可能是:

document.write("<h1>Foo</h1>");