javascript在声明变量时忽略var关键字是完全合法的。JavaScript作为弱类型(loosely-typed)的语言,不声明变量类型貌似是可以理解的,但是事实不是这么的直白,因为变量的属性除了类型外,还有作用域。下面举例说明:
no.1
<script language="javascript">结果展示:
var a = 0;
document.write(a + '<br>');
var b = 1;
function foo() {
document.write(b+ '<br>');
document.write(window.b);
var b = 1;
}
foo();
</script>
0
undefined
1
note:变量提升Hoisting:执行前,代码在加载到内存中,,function中的变量的声明会“提”到function的最前面,其它的顺序不变。但是在实际开发中不提倡写在后面,上面的funtion等同于:
<script language="javascript">
var a = 0;
document.write(a + '<br>');
var b = 1;
function foo() {
var b
document.write(b+ '<br>');
document.write(window.b);
b = 1;
}
foo();
</script>
no.2
<script language="javascript">
a = 0;
document.write(a + '<br>');
b = 1;
function foo() {
document.write(b+ '<br>');
document.write(window.b+ '<br>');
b = 2;
document.write(b+ '<br>');
document.write(window.b);
}
foo();
</script>
结果展示:
0
1
1
2
2
等同于:
<script language="javascript">
var a = 0;
document.write(a + '<br>');
var b = 1;
function foo() {
document.write(b+ '<br>');
document.write(window.b+ '<br>');
b = 2;
document.write(b+ '<br>');
document.write(window.b);
}
foo();
</script>
总结:var声明的是局部变量(拓展:作用域的范围),若是不带var,变量默认是全局的。
相关内容:函数提升
函数提升
函数提升是把整个函数都提到前面去。
在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。
函数声明方式提升【成功】
<script type="text/javascript">函数表达式方式提升【失败】
function myTest(){
foo();
function foo(){
alert("我来自 三门");
}
}
myTest();
</script>
<script type="text/javascript">
function myTest(){
foo2();
var foo2 =function foo(){
alert("我来自 foo");
}
}
myTest();
</script>