JavaScript函数作用域(七)

作用域

理解:在什么范围内,定义的变量,作用在词法阶段

两种:全局作用域、函数作用域

  • 在函数作用域里面可以访问全局作用域中的变量,但是反过来不行
  • 函数中定义的变量,就是局部变量,变量只在函数内可见
  • 作用域嵌套的情况:a)全局作用域和函数作用域  的嵌套
  •                                 b)函数作用域和其他函数作用域  的嵌套

全局作用域和函数作用域  的嵌套实例

a)全局变量可以在函数内使用示例:

// 全局变量
var c = '好吃的油炸代码';

function test(){
  // 在函数内,访问全局变量 c
  console.log(c);
}

// 执行
test()

展示执行:

b)函数局部变量不能在全局变量中使用。

// 在全局内 访问函数内 局部变量
function test(){
   var d = '函数内的变量';
}
console.log(d);

结果展示:

 作用域在分词阶段的示例理解:

如下实例:因为作用域在分词阶段,所以以下代码分词后,是有c变量的,但是执行阶段不会执行 c='好吃的油炸代码'的赋值语句。所以执行结果是 未定义的undefined,而不是报错。

if(false){
  var e = '好吃的油炸代码'
}
console.log(e);

实例展示:

 函数作用域和其他函数作用域示例:

示例1:

  说明:变量h在全局中定义赋值了,在函数testHet内的其他函数inner执行时,用到了h变量,查询时,会先在inner函数内找,找不到在到父函数testHet内找,还找不到再到全局中找,因此找到的是全局的h,全局的h变量有值,所以以下代码执行结果是:好吃的油炸代码

// 函数内嵌套其他函数
var h = '好吃的油炸代码'
function testHet(){
    var inner = function(){
        console.log(h);
    }
    inner();
}
testHet();

 展示:

 示例2:

说明:变量h2  在全局中定义赋值了

           变量h2  在函数testHet中定义了,没赋值

           在函数testHet内的其他函数inner执行时,用到了h2变量,查询时,会先在inner函数内找,找不到在到父函数testHet内找,找到了就不再上溯再找,所以执行结果是:undifend

// 函数内嵌套其他函数
var h2 = '好吃的油炸代码';
function testHet(){
    // 内部定义个h2
    var h2;
    var inner = function(){
        console.log(h2);
    }
    inner();
}
testHet();

展示结果: 

示例3:

  说明:变量h3  在全局中定义赋值了

             变量h3  在函数inner中定义了,且赋值为“新的值”

             在函数testHet内的其他函数inner执行时,用到了h3变量,查询时,会先在inner函数内找,找到了就不再上溯再找,所以执行结果是:新的值

// 函数内嵌套其他函数
var h2 = '好吃的油炸代码';
function testHet(){
   
    var inner = function(){
        // inner内部定义个h2
        var h2='新的值';
        console.log(h2);
    }
    inner();
}
testHet();

展示结果: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值