jsday04 函数补充 对象

一,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
原文地址:https://www.cnblogs.com/adylz111/p/13433590.html