函数调用行为

Function call behavior

本文关键字:函数调用      更新时间:2023-09-26

在我的测试中,mylog函数被调用了三次,但从源代码来看,我认为它应该只执行两次。

<html>
<div id='log'></div>
<script>
var Foo = { counter : "inside the Foo object" };
var counter = "Global";
Foo.method = function() {
    var counter = "inside Foo.method";
    mylog("counter = "+this.counter);
    function test() {
        // this is set to the global object
        mylog("counter = "+this.counter);
    }
    test();
}
Foo.method();
function mylog(msg) {
    log = document.getElementById("log");
    log.innerHTML += log.innerHTML + msg + "<br />";
}
</script>
</html>

http://jsfiddle.net/8BBF7/

这是输出:

counter = inside the Foo object
counter = inside the Foo object
counter = Global

正如我所知,mylog函数只被调用了两次。有人能解释一下为什么会发生这种事吗?

只需在log.innerHTML += log.innerHTML + msg + "<br />";行将+=更改为=,或者保留它并使用形式log.innerHTML += msg + "<br />";

那是因为这个

log.innerHTML += log.innerHTML + msg + "<br />";

您还添加了当前的innerHTML,因此可以复制以前的日志。像这个吗

log.innerHTML += msg + "<br />";

log.innerHTML = log.innerHTML + msg + "<br />";

函数被调用了两次,但在附加日志时出错了。内部HTML。您将log.innerHTML附加两次

工作代码:

function mylog(msg) {
    log = document.getElementById("log");
    log.innerHTML +=  msg + "<br />";
}

请参阅http://jsfiddle.net/8BBF7/16/

它只被调用了两次。检查您的mylog():

function mylog(msg) {
    log = document.getElementById("log");
    log.innerHTML += log.innerHTML + msg + "<br />";
}

要么使用

log.innerHTML = log.innerHTML + msg + "<br />";

log.innerHTML += msg + "<br />";