<SCRIPT LANGUAGE="JavaScript" type="text/javascript"> //定义一个输出函数 function outPut(s){ document.writeln(s) } //全局变量 var i=0; //定义外部函数 function outer(){ //访问全局变量 outPut(i); // 0 //定义一个类部函数 function inner(){ outPut(i); //undefiend var i=1; outPut(i); //1 } inner(); outPut(i); //0 } outer(); </SCRIPT> 你可能认为输出结果是0 0 1 0,事实上在AS中确实是这样的,而在JS中的输入却是0 undefined 1 0,为何会这样了?刚才我们说到了JS函数体中声明的本地变量在整个函数中都有效,因此在上面代码中var i = 1 ;在inner函数中都有效,实际上显式声明的变量i是在预编译时就已经编译到调用对象中了,不同于隐式声明变量在解释时才被定义为全局变量,只是在调用outPut(i)时,还没有将它初始化变量,此时的本地变量i是未赋值变量,而不是未定义变量,因此输出了undefined。上面的代码等效于下面代码:function inner(){ var i; //定义但不赋值 outPut(i); //undefiend i=1; outPut(i); //1 }
你的代码相当于 var name = '200'; function myFunc() { var name; alert(name); //输出undefined name = 100; window.alert(name); //输出100 } myFunc();看这个帖子,有讨论过http://topic.csdn.net/u/20120830/13/db72bec5-db6c-4c78-83ab-973f20bc2216.html
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
//定义一个输出函数
function outPut(s){
document.writeln(s)
}
//全局变量
var i=0;
//定义外部函数
function outer(){
//访问全局变量
outPut(i); // 0
//定义一个类部函数
function inner(){
outPut(i); //undefiend
var i=1;
outPut(i); //1
}
inner();
outPut(i); //0
}
outer();
</SCRIPT>
你可能认为输出结果是0 0 1 0,事实上在AS中确实是这样的,而在JS中的输入却是0 undefined 1 0,为何会这样了?刚才我们说到了JS函数体中声明的本地变量在整个函数中都有效,因此在上面代码中var i = 1 ;在inner函数中都有效,实际上显式声明的变量i是在预编译时就已经编译到调用对象中了,不同于隐式声明变量在解释时才被定义为全局变量,只是在调用outPut(i)时,还没有将它初始化变量,此时的本地变量i是未赋值变量,而不是未定义变量,因此输出了undefined。上面的代码等效于下面代码:function inner(){
var i; //定义但不赋值
outPut(i); //undefiend
i=1;
outPut(i); //1
}
var name = '200';
function myFunc() {
var name;
alert(name); //输出undefined
name = 100;
window.alert(name); //输出100
}
myFunc();看这个帖子,有讨论过http://topic.csdn.net/u/20120830/13/db72bec5-db6c-4c78-83ab-973f20bc2216.html