js高级
来源:互联网 发布:上海数据开放平台 编辑:程序博客网 时间:2024/05/18 17:24
- 一js作用域
- 二词法分析
- 一函数来源
- 二分析过程
- arguments
- js中的不定参数
- callee 代表正在执行的函数可以用于递归
- caller 是函数自身的一个属性代表谁调用的他
- 四js中的this
- 原生类型35hello等
- 引用类型对象函数
- 五闭包
- 六面向对象
- 七静态
- 八私有
- 九继承
- 十原型伪造
一、js作用域
如果有多层函数嵌套,优先在自己所在函数内查找所需变量,如果查不到,再去上层可以调到全局去找 例如:
<script>var t = 3;function t1(){ var t = 4; function t2() { t = 5; alert(t); } t3(); alert(t);}t2();//5</script>
var此处声明一个变量。一个动作。
不加var只是对他的赋值,只是操作变量
二、词法分析
js在代码执行前,有一个代码的分析过程,这个过程叫词法分析
一个变量。
(一)、函数来源:
1、参数 2、var 3、函数声明
(二)、分析过程:
每个函数会形成一个自己的ao(active object)对象,函数所有变量都存在ao属性上,
1、第一步:
先分析函数中的参数
t(a,b,c){}
这时它内部会形成:
ao.a
ao.b
ao.c
由于他的内部还没有分析有没有赋值,,因此这里他们都等于undefined
2、第二步:
分析var声明
var A = 3
3、第三步:分析函数声明
function X(){}
ao上会立即生成ao.x = function(){}
之前如果有ao.x已经存存在,那么这将会被后者覆盖。
ao分析完毕,函数内变量都在ao中找,假如没找到就会在上层函数找,这样形成一个链,就叫“作用域链”。
实例:
var foo = 1;function t(){ console.log(foo);//1.undefined var foo = 2; console.log(foo);//2}t()/*分析:tao = {}1.首先分析参数:没有2.分析var 声明,tAO.foo = undefined;3.分析函数声明过程,无*/
function t(a,b){ function a(){ alert(b); } alert(a);}t(1,3);/*tAO = {}tao.a = undifined;tao.b = undifined;/*分析:tao = {}1.首先分析参数:2.分析var 声明 没有3.分析函数声明, tao.a= function() 并立即输出*/
x();var x = fuction(){ alert('y');}//报错/////////////x()function x(){ alert('y');}//弹出y//原因:第一个var声明了一个变量,没有调用这个x函数// 第二个声明了一个函数,ao上会立即形成一个ao.x=function(){}// 相当于立即执行函数,弹出 y
arguments
js中的不定参数:
函数内部的arguments是一个对象,包含着所有的实参
arguments.length 属性 代表实参的数量
arguments.callee 属性 代表当前函数
// 不定参数function t(a) { console.log(a); console.log(arguments);}t(); /*// 分析期tAO.a = undefined;//执行期, 没传参tAO.a = undefined;*/t(1,2,3);/*// 分析期 tAO.a = undefined;//执行期 tAO.a = 1;*/
callee 代表正在执行的函数,可以用于递归
/*这是一个普通的递归function sum (n) { if(n>1) { return n + sum(n-1); } else if(n==1) { return 1; }} alert(sum(5));*//* 这是立即执行函数表达式(匿名函数)(function () { alert(1);})();*///我们将第一个递归函数改造成一个匿名闭包函数alert( (function (n) { if(n>1) { return n + arguments.callee(n-1); //argument.callee 代表正在执行的函数 } else if(n==1) { return 1; }})(100) );
caller 是函数自身的一个属性,代表”谁调用的他”;
function t() { function x() { alert(x.caller); } x();}t();
四、js中的this
this 始终代表方法的引用来源(通过哪个对象的属性代表的函数,函数的this就指那个对象)
var bark = function() { console.log(this.uname);}var cat = {uname : '加肥'};var dog = {uname : '哮天'};cat.bark = bark;cat.bark(); // 加肥dog.bark = cat.bark;dog.bark(); // 哮天var uname = 'js全局动物';//bark();(cat.bark = dog.bark)(); //
原生类型:3,5,hello等
假如:var a=3;
var b =a;
那么此时a在内存中的值等于3,而b则把 a的值也抄过来一份放 在内存,b也等于三
引用类型:对象、函数
假如:有个function(){
this
}
有几个变量a,b,c
将function的值赋给a,a指向这个function的值,而
var b =a(把a赋给b)
五、闭包
六、面向对象
七、静态
八、私有
九、继承
十、原型伪造
- JS高级
- js高级
- JS高级。
- js高级
- js高级
- 高级js
- js 高级
- js高级
- js高级
- JS高级
- js高级
- js高级
- 【JS】js高级特性备忘
- JS高级应用
- js 高级应用
- js高级程序设计
- JS高级应用
- Ext JS高级程序设计
- 反序列化时,如果第三方返回来的JSON有时有,有时为空的解决方法
- 刷新页面一次的js
- java--方法调用实现乘法表
- MyEclipse中创建Gradle项目报错: Could not run build action using Gradle installation
- 《UNIX网络编程 卷1》 笔记: 高级I/O函数
- js高级
- 算法作业21
- 帆软报表之小白入门
- Redis多机数据库的实现(集群、复制、sentinel)
- VS插件(Visual Assist Trial)破解
- Category
- 接口测试基础
- [Android6.0][RK3399] 电池系统(三)电量计 CW2015 驱动流程分析
- xml转为json的两种方法