分享下 JavaScript 的 function, variable 的作用域,并顺便问个问题
 问题:
如果 html 中,有多个 <script type="text/javascript"></script>,那么,这些<script></script>中的functioin, variable之间有关系吗?可以相互覆盖嘛?JavaScript 的 function, variable 作用域 解释如下
一、在执行JavaScript语句前,首先将所有的declaration都提到其所在scope的顶部(注意:只提取declaration,不提取initialization) 也就是说,解释器在执行某个函数或者initialize某个变量前,首先将这些内容提取到其所在scope的顶部
Demo function定义:
<html>
<head>
<script type="text/javascript">
varFunction("第一次调用");//第一次调用
var varBefore = "I'm varBefore";
varFunction("第二次调用");//第二次调用
function varFunction(invokeSeq){
alert(invokeSeq+": varBefore=" + varBefore);
alert(invokeSeq+": varEnd=" + varEnd);
alert(invokeSeq+": varMiddle=" + varMiddle);
alert(invokeSeq+": varFunction=" + varFunction);
    return 1;
}
varFunction("第三次调用");//第三次调用
var varMiddle = "I'm varMiddle";
varFunction("第四次调用");//第四次调用
var varEnd = "I'm varEnd";
varFunction("第五次调用");//第五次调用
</script>
</head> <body onload="message()">
</body>
</html>
Demo variable定义:<html>
<head>
<script type="text/javascript">
var varBefore;
function varFunction(invokeSeq){
alert(invokeSeq+": varBefore=" + varBefore);
alert(invokeSeq+": varEnd=" + varEnd);
alert(invokeSeq+": varMiddle=" + varMiddle);
alert(invokeSeq+": varFunction=" + varFunction);
    return 1;
}
var varMiddle;
var varEnd;

varFunction("第一次调用");//第一次调用
varBefore = "I'm varBefore";
varFunction("第二次调用");//第二次调用
varFunction("第三次调用");//第三次调用
varMiddle = "I'm varMiddle";
varFunction("第四次调用");//第四次调用
varEnd = "I'm varEnd";
varFunction("第五次调用");//第五次调用
</script>
</head> <body onload="message()">
</body>
</html>
二、如果函数定义和变量定义重名Variable initialiazation> Function declaration> Variable declaration
Demo function and variable定义:
<html>
<head>
<script type="text/javascript">
alert(typeof value);// function. (Function declaration > Variable declaration)
alert(value);// function content. (Function declaration > Variable declaration)
alert(value());// 1

// Both function and variable declaration will be hoisted to the top
// of containing scope before javascript intepreter executes any code
var value;
function value(){
    return 1;
}

value = 10000;
alert(typeof value);//number. (Variable initialization > Function declaration)
alert(value);// 10000. (Variable initialization > Function declaration)
alert(value());// Error. Because value is a variable, not a function any longer
</script>
</head> <body onload="message()">
</body>
</html>