2017-12-27 53 views
0

我在谷歌Chrome浏览器测试这个局部变量:的Javascript为什么我可以访问的功能

function test(){ 
    d = 2; 
} 
function test2(){ 
    test(); 
    document.write(d); 
} 
test2(); 

在功能test变量d应该是当地的,所以我不能在功能test2访问它,有人可以解释为什么这有用吗?

编辑:

这是不重复的,因为我不能在原来的问题,使用的变量,而不VAR使得全球的正确答案找到任何地方,它是隐含提到“隐性globals`

的恐怖
+4

如果这是唯一的d被定义的地方,它不是本地的。你需要'var d = 2; '因为它是一个局部变量。根据你的定义,这是全球性的。 – Snowmonkey

+0

,因为应该使用'var' .... – epascarello

+0

@baao这不是重复的,因为我无法找到我的答案在所谓的重复,请检查它 – ammcom

回答

5

你从来没有真正声明过这个变​​量,所以它不是一个局部变量。相反,这是一个隐含的全球化。

您应该始终使用'use strict';来发生该错误。

window.d = 2; 
1

这个变量没有被宣布,它会自动像声明。函数测试将在其本地范围中查找是否定义了变量d,并且由于未在其中声明而会失败。所以如果测试函数声明了变量但是父范围还没有声明变量d,那么测试函数会询问它的父范围。然后,测试函数的父范围将询问全局范围是否已经声明了d并且全局范围发现没有任何变量d,因此它将创建一个名为d的变量并返回该变量。由于变量d由编译器全局声明,所以你可以在test2中访问它。

1

当你写d = 2那么你告诉JavaScript编译器将值2赋给变量d:

相关问题