变量
ECMAScript的变量是松散类型的,我的理解是在定义一个变量后,假如初始化成一个字符串,后面该变量是可以赋值为任何类型的值的。原文中有一句话耐人寻味:
每个变量仅仅是一个用于保存值的占位符
var test; //未初始化的变量保存了一个特殊的值(undefined)
var message = "test"; //定义一个变量,并赋值为字符串
message = 100; //将message变量赋值为整型,这种操作是有效的,但是不被推荐(至于原因,有清楚的大神可以留言科普一下)
使用var定义的变量会成为变量所在的作用域范围下的局部变量
function printMsg(msg){
var out = "test: " + msg;
console.log(out);
}
printMsg("abc");
console.log(out);
//这里的out变量通过var定义,所以out成了printMsg函数的局部变量,当运行printMsg函数时,会打印out的值,函数退出时,再打印out的值会报错:Uncaught ReferenceError: out is not defined
当我们去掉定义out变量时使用的var关键字,out变量会变成全局变量
function printMsg(msg){
out = "test: " + msg;
console.log(out);
}
printMsg("abc");
console.log(out);
//这里的out被定义成了全局变量,当运行printMsg函数时,会打印out的值,函数退出时,再打印out的值也会输出相应的值,但是这样会导致out会被无意修改,导致代码难以理解和维护,在严格模式下,这种隐式的声明为全局变量会报错:Uncaught ReferenceError: out is not defined