2013-07-12 18 views
0

在我的測試中,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函數被調用的只有兩次。有人能解釋我爲什麼會發生這種情況嗎?

回答

4

只要改變+==上線log.innerHTML += log.innerHTML + msg + "<br />";或保持和使用形式log.innerHTML += msg + "<br />";

1

這只是叫了兩聲。檢查mylog()

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

要麼使用

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

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

這是因爲這個

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

您添加當前的innerHTML一樣,所以你複製較早的日誌。像這樣做

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

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

的函數被調用2次,但你追加log.InnerHTML犯了一個錯誤。您可以附加log.innerHTML 2倍

工作代碼:

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

http://jsfiddle.net/8BBF7/16/