将函数视为值时是否忽略DOM命令?

Lei*_*nus 4 javascript dom function

我对JS和编程很新.我正在自言自语,只是为了好玩!看看这个:

var a=0;
var b=0;

function test(){
  a++;
  b++;
  document.body.innerHTML+=a+" "+b;
  return 42;
}

$("document").ready(function(){
  test();
});
Run Code Online (Sandbox Code Playgroud)

这(如预期)打印出来

1 1
Run Code Online (Sandbox Code Playgroud)

当你刚刚运行该函数时,返回值似乎毫无意义.另一方面,如果我修改它以便它读取...

$("document").ready(function(){
  document.body.innerHTML+=test()+" "+a+" "+b;
});
Run Code Online (Sandbox Code Playgroud)

打印出:

42 1 1
Run Code Online (Sandbox Code Playgroud)

这意味着'var a'增加并且'var b'增加并且42作为test()的值返回,但是忽略了test()的DOM部分.为什么是这样?还有什么别的吗?谢谢.

Pau*_* S. 6

这真的归结为什么+=意思?

x += y;
// same as
x = x + y;
Run Code Online (Sandbox Code Playgroud)

所以

document.body.innerHTML += test() + " " + a + " " + b;
// same as 
document.body.innerHTML = document.body.innerHTML + test() + " " + a + " " + b;
//               X                         Y
Run Code Online (Sandbox Code Playgroud)

现在您可以看到,document.body.innerHTML Y 被更改之前被捕获test(),因此所做的更改test不在Y中.