变量不能在函数内部

时间:2017-08-04 15:09:20

标签: javascript html

Heyo,有人可以向我解释为什么如果变量'white'在函数内部,这段代码将不起作用吗?

it("should load app route", () => {
  // Arrange
  let guard = new VertragGuard(<any>router, contractService);

  // Act & Assert
  (<Observable<Boolean>>guard.canLoad(null)).subscribe(value => {
      expect(value).toBeTruthy();
  });
});

1 个答案:

答案 0 :(得分:2)

在这种情况下:

&#13;
&#13;
var button = document.querySelector("button");
var body = document.querySelector("body");
var white = true;

button.addEventListener("click", function() {
  if (white) {
    body.style.backgroundColor="pink"; 
  } else {
    body.style.backgroundColor="white";  
  }   
  white = !white;
});
&#13;
<button>Click</button>
&#13;
&#13;
&#13;

您更改了全局变量white,并且在执行函数后它将是truefalse,因此该函数会将颜色触发到另一个(如果它是白色的,请点击它之后)将是粉红色,反之亦然。)

但在这种情况下:

&#13;
&#13;
var button = document.querySelector("button");
var body = document.querySelector("body");

button.addEventListener("click", function() {
  var white = true;
  if (white) {
    body.style.backgroundColor="pink"; 
  } else {
    body.style.backgroundColor="white";  
  }   
  white = !white;
});
&#13;
<button>Click</button>
&#13;
&#13;
&#13;

函数执行完成后,将删除所有本地函数变量。您的white变量在函数开始时总是true,因此第一个if语句每次都有效(将背景更改为仅粉红色)。