一,arguments的使用 JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此也可以进行遍历。 二,函数的命名 规则 1.由字母、数字、下划线、$符号组成,不能以数字开头 2.不能是关键字和保留字,例如:for,while,this, name 3.区分大小写(建议小写,大写识别为对象的构造函数) 规范: 1.函数名必须有意义 2.遵守驼峰命名法 3.建议不要用$作为变量名 匿名函数 匿名函数:没有名字的函数 如何使用: 将匿名函数赋值给一个变量,这样就可以通过变量进行调用 自调用函数 匿名函数不能通过直接调用来执行,因此可以通过匿名函数的自调用的方式来执行 })(); 函数作为参数 因为函数也是一种类型,可以把函数作为两一个函数的参数,在两一个函数中调用 函数做为返回值 因为函数是一种类型,所以可以把函数可以作为返回值从函数内部返回,这种用法在后面很常见 三. 预解析 JavaScript引擎在对JavaScript代码进行解释执行之前,会对JavaScript代码进行预解析,在预解析阶段,会将以关键字var和function开头的语句块提前进行处理。 当变量和函数的声明处在作用域比较靠后的位置的时候,变量和函数的声明会被提升到作用域的开头。 但函数表达式并不会被提升 定义提升,变量的赋值不提升 四,作用域 函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。 凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。 将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链。 补充 声明变量使用`var`, 如果不使用`var`声明的变量就是全局变量( 禁用 ) 如果里层作用域的变量未定义,会逐层向上寻找,直至被定义为止 同名的函数,后面的会覆盖前面的 4. 对象 对象字面量 var o = { name: "zs", age: 18, sex: true, sayHi: function () { console.log(this.name); } }; new Object()创建对象 var person = new Object(); person.name = 'lisi'; person.age = 35; person.job = 'actor'; person.sayHi = function(){ console.log('Hello,everyBody'); } 工厂函数创建对象 function createPerson(name, age, job) { var person = new Object(); person.name = name; person.age = age; person.job = job; person.sayHi = function(){ console.log('Hello,everyBody'); } return person; } var p1 = createPerson('张三', 22, 'actor'); 自定义构造函数 function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayHi = function(){ console.log('Hello,everyBody'); } } var p1 = new Person('张三', 22, 'actor'); new关键字 构造函数,是一种特殊的函数。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 new在执行时会做四件事情: new会在内存中创建一个新的空对象 new会让this指向这个新的对象 执行构造函数,目的:给这个新对象加属性和方法 new会返回这个新对象 this详解 JS中this的指向问题,有时会让人难以捉摸,随着学习的深入,我们可以逐渐了解。 函数内部的this几个特点: 1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定 2. 一般函数直接执行,内部this指向全局window 3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象 4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化 遍历对象的属性 通过for..in语法可以遍历一个对象 删除对象的属性 delete obj.name; function fun() { this.name = 'mm'; } var obj = new fun(); console.log(obj.name); // mm delete obj.name; console.log(obj.name); // undefined