php函数声明提前,javascript的函数作用域及声明提前

废话不说;先来段代码;

var scope='global';

function test(){

alert(scope);        // 输出undefine;而不是global

var scope='local';

alert(scope);        // 输出local

}

test();

脑算下;你可能会认为第一alert会输出global;

但是事实上第一个alert输出的是undefined;

这是怎么回事呢?

要探讨这个问题首先要解释下两个概念;

1:函数作用域:

函数作用域指的是函数内声明的变量只在此函数内有效;

2:声明提前:

声明提前的意思是说在函数内任何位置声明的变量都会提前至函数最上边首先解析;

理解声明提前的概念后也就是说上面这段代码等价于如下;

如果从字面上没能理解这个声明提前;那么从代码中就容易懂了;

var scope='global';

function test(){

var scope;           // 先声明了此变量

alert(scope);        // 因为还未赋值;所以是undefine

scope='local';       // 赋值

alert(scope);        // 输出local

}

test();

那么引申出来的经验也就是说在函数体内首先把要用到的变量都在函数开始就声明;

而不是说用到的时候才声明变量;

至于为什么第一个alert不是输出global;

因为函数体内的局部变量是会遮盖全局变量的;

想必不用过多解释;

0e20b354be51ba02888338d1accdd61f.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值