js函数内未声明变量的作用域

背景

js虽然一直在使用,但是脑中的知识并不成体系,多数情况是在网上搜索代码段然后复制粘贴。趁现在有时间通过菜鸟教程系统的学习一下js。

问题

在菜鸟教程函数这一部分,有下面这段话,我觉得比较神奇,于是验证一番。

向未声明的 JavaScript 变量分配值

如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。
这条语句:

1
2
>carname="Volvo";
>

将声明一个全局变量 carname,即使它在函数内执行

验证

起初我根据字面意思理解,在函数内只要定义了如上所述的一个变量,那么在全局就都可以访问,于是我写了如下一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
function o() {
wang = "wanghan";
}
alert("hehe");
alert(wang);
</script>
</head>
<body>
</body>
</html>

发现hehe可以正常弹出,而wang却不行。我立马就火了,这菜鸟教程怎么回事?!明白过来是半个小时以后的事了,原来我只是定义了函数,而并未调用过它,变量也就无从创建了。所以改成下面这个样子,就可以访问啦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
function o() {
wang = "wanghan";
}
o();
alert("hehe");
alert(wang);
</script>
</head>
<body>
</body>
</html>

后记

出现这个疑问归根结底还是基础知识不牢固,路漫漫其修远兮呀!不过实际运用中应该不会这样用,在函数外多打三个字母var,又方便又清晰,何乐而不为呢?

有钱的捧个钱场~