首先,最重要的是,Javascript是弱语言,没有c/c++他们拥有的块级作用域,但是有函数作用域。
(1)
所谓函数作用域就是说:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
var scope="global";
function t(){
console.log(scope);
var scope="local" ;
console.log(scope);
}
t();
上述代码中,最后输出:undefined local;
由于函数内部声明了scope并对他进行了赋值。而函数内部是可以进行变量提升的,同时变量初始化还在原来位置,则上面的代码可以变成:
function t(){
var scope;
console.log(scope);
scope = "local";
console.log(scope);
}
(2)
变量作用域:在函数中,有两种变量声明,一种是var a = b,另一种是不添加var的声明,后者所声明的变量是全局变量。
我们可以总结出来,1、在函数内部,var 变量=值,则该变量作用域在函数内,且若该赋值不在函数开头处,则等效于把变量声明提升至开头处,而赋值停留在原处。
2、在函数内部,变量=值,则作用域在全局。
3、在循环等中,无块级作用域,则var 变量=值 ,该变量是全局变量。

浙公网安备 33010602011771号