var变量的作用域与提升

1.变量提升

无论实际声明的位置在何处,都会把变量的声明提升到函数或全局作用域的顶部(而赋值操作还是在原先的位置)

2.变量作用域

在ES5中,js只有两种形式的作用域:全局作用域和函数作用域
1.全局作用域其实是全局对象的作用域,任意地方都可以访问到
2.函数内可以访问函数外的变量,而函数外无法访问函数内的变量

var age = 18;   //全局变量,全局作用域
function outer() {   //外部函数
    console.log(age, 1);    // 内部的age会进行变量提升, undefined
    var age = 23;
    function inner() { //内部函数
        console.log(age, 2);   //23
    }
    inner();
}
outer();
console.log(age, 3); //18
var name = "World!";
function fun() {
    console.log(name);    //函数内的var进行变量提升  undefined
    if (typeof name === 'undefined') {
        var name = 'Jack';     
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
}
fun();

3.案例

//函数作用域内的变量外部是无法访问的
function foo() {
   // 函数作用域内var会使变量提升到函数最顶部
    var name = 'nick'
}
foo()
console.log(name)   //会报错
// 函数内声明相同的变量
var name = 'nick';
function foo() {
   var name = 'nancy';
   console.log(name);
}
foo(); // => 'nancy'
console.log(name); // => 'nick'
//在控制语句内声明的变量,在控制语句外面也可以使用
if (true) {
    var a = 1
}
for (var i = 1; i < 10; i++) { }
console.log(a, i);  // => 1  10

// 在控制语句内声明一个与外部同名的变量。
var b = 1;
if (true) {
    var b = 10; // 与外部 x 变量同名
}
console.log(b); // => 10
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值