函数作用域是指在函数内声明的变量在函数体内始终是可见的,这意味着在函数体内,变量在声明之前就可以直接。javascript这个特性被称为声明提前,
即不管是在函数体内的for,if等语句块中定义的变量,都会被提前至函数顶层定义(function t(){var i;...})
//与java等语言的变量的块级作用域不同的是javascript是函数作用域
function testScope(o){
var i=0;
//var j;所有定义在for,if的变量和这种其实是一个意思,javascript会把下面定义的变量提前至变量顶层
console.log(j);
//console.log(m);
if(typeof o=="object"){
var j=1;//j会被提前至函数顶层定义,var j
for(var k=0;k<10;k++){//k会被提前至函数顶层定义,var k
console.log(k);
}
console.log(k);
}
//var m=0;//k会被提前至函数顶层定义,var k
console.log(j);
}
testScope({x:1});
var scope="global";
function f(){
console.log(scope);//undefined
var scope="local";//javascript中,会把变量拿到函数最顶层定义
console.log(scope);//local
}//等价于下面
f();
function ff(){
var scope;
console.log(scope);//undefined
scope="local";
console.log(scope);//local
}//等价于上面
ff();