读书笔记:JavaScript——作用域

一、作用域链的前端,指当前执行的代码所在环境的变量对象

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数(向上搜索)

二、延长作用域链的方法:

1、with语句

function buildUrl(){
        var qs="?debug=true";
        with(location){  //将location对象添加进buildUrl()的作用域链前端
            var url=href+qs;  //此处href即location.href
        }
        return url;
    }
    alert(buildUrl());  //输出的是一个拼接的url

结果:
alert结果url
2、try-catch语句的catch块

try{
	aler('hello world');
}catch(e){
	console.log(typeof(e)+e)
}

结果:
控制台输出结果

三、JavaScript没有块级作用域
如:
1、if语句中的变量声明会将变量添加到当前的执行环境

if(true){
    var color='blue'
}
alert(color);//'blue'——if语句内的变量声明会被添加到当前执行环境(此处就是全局环境)

2、for语句中创建的变量,在for循环执行完毕后,也依旧存在于for外部的执行环境

for(var i=0;i<10;i++){
        console.log(i)
    }
alert(i);//10——for语句创建的变量i在循环执行完毕也依旧存在于环境中(此处就是全局环境)

四、如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境

总结:

  • 执行环境有全局执行环境和函数执行环境之分
  • 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链
  • 函数的局部环境有权访问函数作用域中的变量、其包含(父)环境至全局环境
  • 全局环境只能访问在全局环境中的变量和函数,而不能直接访问局部环境中的任何数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值