学习JS(5)
来源:互联网 发布:java 角色权限管理 编辑:程序博客网 时间:2024/05/21 00:47
1.作用域
1)在JS中,嵌套函数时非常普遍的,在函数嵌套中,首先在函数内寻找变量,如果查找不到,在逐层向外查找,直到全局区域,最后undefined;
2)var是在函数运行的上下文中,声明一个变量,如果不加的话,则仅仅是一个复制操作;
3)如果对于没有生命var的变量,在任何地方都找不到,就赋给window全局;
4)以windows来引用全局变量,查找不到,返回undefined,作为不是全局变量的则是返回变量 is not defined。
2.词法分析
1)分析参数;
2)分析变量声明;
3)分析函数声明。
函数运行前进行分析参数,生成活动对象,把函数声明的参数,形成活动对象的属性,值都是undefined,接收实参形成活动对象相应属性的值,再分析变量的声明(var),如果活动对象上面已经有参数的属性,则没有影响,如果没有的话,则添加活动对象属性的值为undefined,最后分析函数声明,把函数赋给活动对象的对象的属性,如果之前对象的属性已经存在,则被覆盖。
注:作用域链指作用域,原型链指活动对象,分析和执行时不同的过程,分析由外而内,执行由内而外。
3.arguments详解
1)arguments是一个长的很像数组的对象,它的内容是函数运行时的实参列表。
2)arguments可以存储所有的实参,即使没有与之对应的形参。
3)形参与对应的arguments单元,其实是相互映射的,可以互相影响。
4)索引也和数组一样是从0向后排序的。
5)arguments想要获取函数运行是实参的个数,可以使用arguments.length。
6)callee代表当前所运行的函数,可以用于匿名函数,形成对函数的调用。
注:1)本函数活动对象上面没有某个属性,则继续去外层函数的活动对象上面查找,直到查找到全局变量,叫做作用域链;
2)每个函数有自己的arguments.callee,但不向外层接着找arguments的相关属性,所以不形成链;
4.js中的this
因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数。
1)当this作为普通函数调用时,this的值指向window;
示例1: var x = 1; function test() { alert(this.x); } test(); // 1 示例2: var x = 1; function test() { this.x = 0; } test(); alert(x); //0
2)当this作为对象的方法来调用时,this指向方法的调用者,即这个对象;
function test() { alert(this.x); } var obj = {}; obj.x = 1; obj.m = test; obj.m(); // 1
3)当this作为方法调用时,this指向其调用者,即它本来的对象;
例如:a.obj = func; a.obj()就是调用func()。
4)当this作为构造函数调用时,js中没有类的概念,创建对象是用构造函数来完成,或者直接用json格式{}来写对象。
示例1: function test() { this.x = 1; } var obj = new test(); alert(obj.x); // 1 示例2: var x = 2; function test() { this.x = 1; } var obj = new test(); alert(x); //2
5)apply调用
this指向apply的第一个参数。
示例: var x = 0; function test()
{ alert(this.x); } var obj = {}; obj.x = 1; obj.m = test; obj.m.apply(); //0 obj.m.apply(obj);//1
注:函数.call(对象,参数……),函数的this指向对象。
- 学习JS(5)
- JS学习(5)----Numbers
- Node.js学习--基础知识(5)--npm
- JS学习5(面向对象)
- node.js学习日记(5)
- JS学习笔记(5)内置对象
- js学习笔记5
- JS 学习5 json
- JS学习笔记5
- js学习记录5
- js学习(一)
- 学习JS(2)
- 学习JS(3)
- 学习JS(4)
- JS学习---(一)
- JS学习---(二)
- 学习JS(6)
- 学习JS(7)
- ssh2
- ggplot2——饼图篇
- pip的安装,更新,卸载模块以及使用方法 python
- linux mmap 映射文件
- zeromq-4.1.2在windows下的编译
- 学习JS(5)
- 【UITextField与UITextView】
- TopCoder SRM665 Div2 A
- 清心野人V2.0正式开启
- 1060. Are They Equal (25)
- Sicily 1036 Crypto Columns
- 网易yum源配置 CentOS6.5
- Linux GCC常用命令
- ListView和Adapter