Javascript中的作用域是如何工作的?
我无法理解Javascript中的作用域是如何工作的。Javascript中的作用域是如何工作的?,javascript,Javascript,我无法理解Javascript中的作用域是如何工作的。 例如 即使在{}中声明了用户名,它仍然在第二个脚本中解析。这怎么可能呢?在您的示例中,唯一的作用域是全局作用域。不同的脚本块是DOM元素,没有自己的javascript作用域 对于javascript作用域。javascript作用域由函数决定(ECMAScript 6添加了一个let语句,该语句也引入了块作用域)。函数定义或let块中未使用var或function声明的所有内容都在全局范围内。只有一个全局作用域,由所有块共享。do块没有引
例如
即使在
{}
中声明了用户名
,它仍然在第二个脚本中解析。这怎么可能呢?在您的示例中,唯一的作用域是全局作用域。不同的脚本块是DOM元素,没有自己的javascript作用域
对于javascript作用域。javascript作用域由函数决定(ECMAScript 6添加了一个
let
语句,该语句也引入了块作用域)。函数定义或let
块中未使用var
或function
声明的所有内容都在全局范围内。只有一个全局作用域,由所有
块共享。do
块没有引入新的作用域,因此在后面的文档中可以看到声明的变量。write()
在这种情况下,您将在全局窗口中创建变量userName
。将第一个示例加载到浏览器后,打开JavaScript控制台并执行console.log(窗口)
。您应该会看到窗口
对象转储到控制台中。打开它,你会发现键“userName”,值为“George”
下次从document.write
中引用变量userName
时,您是从全局范围引用它
相反,如果您编写了一个函数,然后从document.write()
调用它,那么只要您使用var
关键字将其声明为函数的局部变量,就不会在窗口中看到它
<html>
<head>
<script>
function foo() {
var userName = "George";
return 'Name = ' + userName;
}
</script>
</head>
<body>
......
<script>
document.write(foo());
</script>
</body>
</html>
函数foo(){
var userName=“George”;
返回'Name='+用户名;
}
......
document.write(foo());
1。javascript中没有块作用域。2. <代码>用户名
在全局对象
窗口中声明。问得好。我承认这不是我最好的答案之一,但我认为它解决了海报的困惑。它可能会被否决,因为你的断言是不正确的。通过使用var
关键字,可以防止变量位于功能块内的全局范围内function(){a=1;}
-那里的a
将在全局范围内function(){var a=1;}
-这里a
不在全局范围内。好的,我已经提到了定义局部变量的var
和function
关键字。
<html>
<head>
<script>
do {
var userName = "George";
//bla
} while (someCondition);
</script>
</head>
<body>
......
<script>
document.write('Name = ' + userName);
</script>
</body>
</html>
<html>
<head>
<script>
function foo() {
var userName = "George";
return 'Name = ' + userName;
}
</script>
</head>
<body>
......
<script>
document.write(foo());
</script>
</body>
</html>