JavaScript作用域

JavaScript作用域划分和Python一样,都是以一个函数作为一个作用域。而其他语言如c,c++等,是以代码块为作用域,而每一对花括号代表一个代码块。

JavaScript作用域具有4个特性:

1、以函数作为作用域。

2.函数的作用域在函数未被调用前已经创建。

3.函数的作用云存在作用域链,且也在被调用前创建。

4.函数内局部变量提前已经声明。

作用域链 用下例说明:

name='Beauty';
function func(){
    var name='Alice';
    function inner(){
        console.log(name);
    }
    var name='Jack';
    return inner;
}
re=func();
re();

re=func()执行fun函数。返回inner.   则re=inner   re()也就是执行inner(), 打印name,inner函数中没有name,在func函数中找name,首先 name='Alice',接着name='Jack',Jack替代了Allice,所以最终打印的name是Jack.当然,如果func函数中没有name,则会在func函数外也就是全局变量中找name.

反映出本例的作用域链就是:

全局----》func----》inner; 执行inner函数时,变量寻找顺序:inner----》func----》全局。

还有,要注意:函数执行过程中,值可以被替代。

第4条性质的例子如下:

function func(){
    console.log(name);
    var name='Alice';
 
}
func();

输出 undefined ,原因:在执行console.log(name)前,name已经被声明, var name;  name='Alice' 是对name的重新赋值。

function func(){
    console.log(name);
}
func();
直接报错。name声明,但是没有值。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值