第三周JavaScript学习记录
来源:互联网 发布:轩辕剑 还原数据库 编辑:程序博客网 时间:2024/06/06 01:01
本文内容属学习记录及笔记,如有错误请多多指教。
第三周学习内容
作用域
- LHS与RHS查询
引用自前辈们的Blog
LHS(Left-hand Side):left是指“=”号的左边,意思是要给查询得到的这个变量赋值,比如要吧1付给a变量,要先查询a是否存在,这时候用的就是LHS查询
RHS(Right-hand Side):right指的是“=”号右边,意思是要获取某个变量的值,比如打印a变量,console.log(a);js引擎要去查询这个变量是否存在,得到变量只想的值,这个时候用的就是RHS查询
LHS查询比较松散,如果查询不到,就会创建一个全局的,不会抛出异常
RHS查询比较严格,如果查询不到的话就会抛出异常,因为你要获取某个变量指向的值,可是根本就没有那个变量,这个时候已经超出它的能力范围,所以只能抛出异常
function foo(){ a=b;}foo();//这里就会提示错误,因为B并未fu值,而又进行了RHS查询
还有一个比较形象的解释,来自前辈们的Blog
var c =3; function a(b){ console.log(b+c); } a(2);
对于上面的代码,引擎与作用域是这样交流的:
引擎:全局作用域,我想找一下c,你见过他么?
全局作用域:嗨,别提了,编译器那小子刚刚声明了它,拿去吧!
引擎:太棒了!我现在要把3丢给他
引擎:等一下,还有一个事情想麻烦你一下,我想对a函数进行引用,你知道她在哪里么?
全局作用域:就是那个跟c一起被丢进来的家伙把?喏,在这里呢,给你。
引擎:哈哈,太感谢了,这样我只需要把2…..。
a函数作用域:萨瓦迪卡,引擎,今天天气不错啊,一起出去玩吧!
引擎:别提了,我手头上忙的要死,对了,你碰到过一个叫b的么?
a函数作用域:哦,他是a函数的一个形参,我这刚好有,拿去用
引擎:够哥们,这样我只需要把2放到b里面,之后…..哎,小a,console你有么
a函数作用域:有有有,这是个内置对象,给你
引擎:哈哈,你一直这么靠谱,我找找,哎呦,真有log这个函数,我得赶紧引用他
引擎:你看我这脑子,你能在帮我找一下b么,我得确认一下b的内容
a函数作用域:放心,看!b没有变过,放心
引擎:那最好了,就差最后一步了,做完喝酒去,你那里有没有c,交出来我请你一包辣条!
a函数作用域:真的么!我找找,嗯…..不行,我这里没有,你得去问问我大哥 全局作用域
引擎:全局作用域,不好意思,又来找你了,不知道你有没有c,我拿辣条跟你换
全局作用域:看你累的满头大汗的,辣条你自己留着吧,c给你,做完快歇歇吧
引擎:么么哒,你最好了,晚上我请你吃饭!
- 2.声明提升
a=2;var a;console.log(a);//2
直觉上来看,可能会认为在声明了a=2之后var a 会被重新赋值了,但是实际上输出的还是2。
console.log(a);var a=2;//undefined
而这里却是undefined,其实原因是变量会声明提升。
//上面函数等同于var a;console.log(a);a=2;//undefined
函数声明一样也会进行声明提升
foo();function foo(){ console.log(1);}
之所以这串代码会输出1,因为函数声明会提升。
//上面的函数声明等同于function foo(){ console.log(1);}foo()
但是要注意的是,函数声明会进行提升,函数表达式却不会进行提升
foo();var foo= function(){ console.log(1);//输出错误}
未完成函数声明与函数表达式的的异同分辨
- 函数作用域和全局作用域
var a=b=10;(funcition(){ var a=b=20;})();console.log(a);//10console.log(b);//20
这个例子就很好的说明的,函数作用域内的变量只能内部访问,而全局作用域的变量可以 在任何地方访问。而JS是么有块级作用域的,前辈们的Blog里有很多例子可以思考。
未完待续
记录一些代码
if(!'a' in window){ var a=1;}console.log(a);//undefined
解析这个代码
if(!'a' in window) //是逻辑非,值的类型是布伦值-布伦值,所以!a=false,所以可以理解为 if(false in window)var a=1;//if判断不成立,a并未赋值console.log(a);//undefined
可以使用为window对象添加false属性的方法来让IF成立
var window={};window.false="yes";if(!'a' in window){ var a=1;}console.log(a);//1
- 第三周JavaScript学习记录
- JavaScript总结记录(学习JavaScript高级程序设计第三版)
- JavaScript总结记录2(学习JavaScript高级程序设计第三版)
- JavaScript总结记录3(学习JavaScript高级程序设计第三版)
- 学习javascript:第三课
- Javascript学习第三集
- JavaScript 的学习记录。
- JavaScript 学习点滴记录
- javascript 学习记录
- javascript学习记录
- JavaScript学习记录
- Javascript 常见学习记录
- javascript学习记录
- javascript学习记录
- 学习记录--javascript多态
- JavaScript学习记录
- JavaScript学习记录(一)
- JavaScript学习记录(二)
- 关于几个统计用的C++方法
- 两张表弄懂Jsp中的四个作用域域和九个内置对象
- Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- 笔记:事件分发机制(二):ViewGroup的事件分发
- 注解定时任务实现
- 第三周JavaScript学习记录
- java中String相关操作方法
- 微信小程序二维码解析遇到的问题
- webpack入门(1)
- THREE.js案例源码学习-geometry_birds
- 数据结构与算法Java版——双向链表
- 解决mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists
- shell循环etl跑历史数据
- 一篇随笔