javascript中的var关键字

时间:2020-11-27 17:00:31

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>