在JS代码中如果在同一个script标签里,声明一个变量 ,无论是在什么地方声明的,即使没有赋值,在调用判断时是不会报错的。
var a;
alert(a == undefined); //true
alert(a == null);//true
var a;
alert(a == null);//true
var a = 1;
var a = 1;
alert(a == null);//false
但是如果没有var声明一个变量就使用的话,浏览器是会报错的:
alert(a);//报错
alert(a == undefined);//报错
但是,如果是使用一个已知变量里没有定义的属性,那又不会报错:
var s = "";
alert(s.a);//undefined,a没有定义过
var声明的全局变量,只要在同一个标签里面,无论调用的代码最开始还是在最后面,都能找到这个声明的变量名,只是没有赋值而已。
和这个相同的是function来定义一个函数也是如此,只要在同一个标签里,即使先调用,后声明,都能执行。这是因为javascript函数的预加载。
a(123);//246
function a(n){
alert(n*2);
};
a(123);//报错
var a = function(n){
alert(n*2);
};