YanTianFeng的知识库

Want Coding

Want Reading

文章 89

访问 18444

评论 2

头像

YanTianFeng

发私信

文章 89
访问 18444
评论 2
JAVASCRIPT
返回顶部

Knowledge  JavaScript 作用域

标签   作用域  

  ( 232 )       ( 0 )


前言

作用域用来规定变量、对象生效的范围。

局部作用域

一个函数就是一个独立的局部作用域。函数一旦定义出来,就诞生了一个新的局部作用域。局部作用域中的变量就称为 局部变量

局部变量只在当前函数内生效,所以不同的函数可以使用相同名称的变量,相互之间不受影响(它们处在不同的作用域中)。

实例代码:

// 此处不能使用 carName 变量

function myFunction() {

    var carName = "Volvo";
    // 函数内可随意使用 carName 变量

}

// 此处不能使用 carName 变量

需要说明一下,函数参数部分的变量也是局部变量(作用域仅限于当前函数)。

全局作用域

定义在函数外的变量,即为全局变量。全局变量处于 全局作用域,网页中所有脚本和函数均可直接使用。

var carName = " Volvo";
 
// 此处可使用 carName 变量

function myFunction() {
    // 函数内可使用 carName 变量
}

// 此处可使用 carName 变量

没有使用 var 关键字声明的变量:

给没有用 var 关键字声明的变量赋值,该变量会被 js 隐式声明为全局变量。

function myFunction() {
    carName = "Volvo";  // 变量 carName 会被js隐式声明为全局变量
}

没有使用 var 关键字声明的变量如果出现在函数里,只有该函数调用之后,变量才会被 js 隐式声明为全局变量,否则该变量相当于没定义。

局部变量&全局变量同名

当局部变量和全局变量同名,虽然全局变量作用域更大,甚至覆盖局部变量作用域,但局部变量优先级更高,会屏蔽全局变量。

var a = 100;         
                     
function myFunction()
{                    
    var a = 1000;    
    console.log(a);  //输出 1000
}

变量生命周期

JavaScript 局部变量生命周期:声明时初始化,函数执行完毕后销毁。

JavaScript 局部变量生命周期:声明时初始化,页面关闭后销毁。

变量提升

变量提升,就是把函数内局部变量提升到函数的顶部。需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来(这是 js 函数的一个隐含机制)。

我们定义一个变量:

function myFunction()
{                    
    var a = 100;     
}

实际上它是这样子的:

function myFunction()
{                    
    var a;           
    a = 100;         
}

我们在写 js 代码的时候,我们应该把当前函数需要使用的变量全部放在函数级作用域的顶端(这也是个良好的编程习惯),以防止出现意外。

函数提升

函数提升,就是把函数内部的函数提升到当前函数的顶部。需要说明的是,只有函数声明形式才能被提升(这也是 js 函数的一个隐含机制)。

//函数声明方式提升【成功】

function myTest(){
    foo();
    function foo(){
        alert("我来自 foo");
    }
}
//函数表达式方式提升【失败】

function myTest(){
    foo(); //此处的函数调用报错。
    var foo =function foo(){
        alert("我来自 foo");
    }
}