js+面向对象相关笔记(五)

10 篇文章 0 订阅
1.作用域(起作用的范围)
◆块儿级作用域:ECMAScript6之前js中没有块儿级作用域
◆词法作用域:就是在代码写好的一刻,变量的作用域就已经确定了,这种作用域,就是所谓的词法作用域,和词法作用域相对的叫动态作用域,js中的词法作用域不是动态作用域
◆ECMAScript6之前js中唯一能够产生作用域的东西是 函数
◆词法作用域的规则【
◇函数允许访问函数外的数据
◇整个代码结构中只有函数可以限定作用域
◇作用域规则首先使用提升规则分析
◇如果当前作用域中有了该变量,就不考虑外面的同名变量





2.js代码的执行分为两个步骤
◆预解析:检查语法错误,函数提升,变量提升【 ◇在提升的时候,如果有变量和函数同名,会忽略掉变量,只会提升函数。
◇函数的提升:function name(){}
◇变量的提升:var name;
☆提升归提升,赋值归赋值,提升的时候不会分配空间,赋值的时候才会进行内存空间的分配。
◇预解析式分作用域的,函数中的变量或者子函数都会提升到当前父级作用域中,而不是提升到全局作用域中。
◇预解析式分段的,也就是会分script标签对,但是这个问题只针对function而已。
◇函数表达式并不会被提升,如 var fn=function(){};

◆执行:真正的执行js代码


3.提升
◆变量的提升是分作用域的
◆当函数和变量同名的时候,只会提升函数,不会提升变量名
◆函数同名,全部都会提升,但是后面的函数,会覆盖前面的函数
◆函数表达式不会被提升,但是变量会被提升





4.作用域链
◆只要是函数就可以创造作用域
◆函数中又可以再创建函数
◆函数内部的作用域可以访问函数外部的作用域
◆如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链。



5.变量访问规则
◆首先在所在的作用域中查找,如果找到了就直接使用,如果没有找到就到上一级作用域查找,直到找到为止,如果实在找不到,那么返回undefined


6.闭包
◆闭:闭合,关闭,封闭
◆包:包裹,包起来
◆一个具有封闭的对外不公开的,包裹结构的空间
◆js中的闭包就是函数
◆闭包的原理:

◇就是作用域访问原则也就是作用域链
◇上级作用域无法直接访问下级作用域中的变量

◆闭包要解决的问题:

◇闭包内的数据不允许外界访问
◇要解决的问题就是间接访问该函数内的数据





7.闭包的基本模式
◆通过闭包返回的函数或者方法,来修改函数内部的数据

//很像是在给一个对象封装字段一样
function foo(){
var name="zs";
var age=25;
return {
getName:function(){
return name;
},
setName:function(value){
name=value;
return name;
},
getAge:function(){
return age;
},
setAge:function(value){
//在函数外部想要修改数据
//只能够通过函数内部的方法
//可以在函数内部定义的这个方法里
//设置安全措施,校验之类的操作
//可以保证系统的安全性和稳定性
if(value<0){
   throw new Error("年龄太小了,无法修改!!");
}
age=value;
return age;
}
}
}
var obj=foo();
obj.setName("yls");
obj.setAge(18);
console.log(obj.getName()+":"+obj.getAge());
】。
◆创建一个私有的空间,保护数据
◆外部想要访问数据,只能通过函数提供的方法
◆在提供的方法中,可以设置一些校验的逻辑判断,确保数据的正确性和安全性




8.中国国家数字图书馆:http://mylib.nlc.cn/web/guest


9.条件式函数声明是否会被提升,由浏览器决定,条件式函数声明不在w3c标准之中,所以不推荐去写【
foo();//这里会报错,因为未被提升
if(true){
function foo(){
console.log("123");
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值