js作用域

变量特性
javascript变量是弱类型(也叫松散类型)的,所谓松散类型就是可以用来保存任何类型的数据
编程语言分为动态类型语言和静态类型语言两种。 动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。javascript就是动态类型语言的代表。
变量松散类型的特性总结起来有两点:一是声明时不用给变量指定数据类型;二是赋值时可以修改数据类型(有效但是不推荐)
变量作用域
变量的作用域(scope)是程序源代码中定义这个变量的区域
   作用域分为全局作用域和函数作用域(又叫局部作用域)两种
   全局作用域是最外围的一个执行环境,在web浏览器中,全局执行环境被认为是window对象。所有全局变量和函数都是作为window对象的属性和方法创建的。全局变量拥有全局作用域,在javascript代码中的任何地方都是有定义的。全局作用域直到应用程序退出例如关闭网页或浏览器时才会被销毁
  在函数内声明的变量只在函数体内有定义。它们是局部变量,作用域是局部性的。函数参数也是局部变量,它们只在函数体内有定义。函数作用域中的所有代码执行完毕后,该作用域被销毁,保存在其中的所有变量和函数定义也随之销毁.
例如:函数内部定义的变量在外部使用将会报错


function test(){
var message = 'hi';
}
test();
alert(message);//错误

如果省略var操作符,则会创建一个全局变量(不建议使用)

function test(){
message = 'hi';
}
test();
alert(message);//'hi'

  在函数体内,局部变量的优先级高于同名的全局变量,如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量遮盖

var scope = 'global';
function checkscope(){
var scope = 'local';
return scope;
};
checkscope();//'local'

你可能感兴趣的:(js作用域)