JS基础(五)函数和对象

JS基础(五)

一、arguments使用

当不确定有多少个参数传递的时候,可以用 arguments 来获取。JavaScript 中,arguments实际上它是当前函数的一个内置对象。

具有以下特点:

  • 是一个伪数组
  • 具有数组length属性
  • 可以按照索引的方式进行存贮
  • 没有真正数组 的一些方法,如:push、pop
  • 只有函数有arguments对象,每个函数都内置好了arguments

二、函数声明

1、自定义函数命名方式(命名函数)

利用函数关键字function自定义函数

function  函数名 (){...}
函数名();//调用,可以放在函数前或后

2、函数表达式(匿名函数)

var 变量名 = function(){
     ...};
变量名();//调用,必须放在函数体下面

三、作用域

1、定义

  • 限定这个变量名字的可用性的代码范围就是这个名字的作用域。
  • 提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

2、全局作用域

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件。

3、局部作用域

作用于函数内的代码环境,就是局部作用域。

4、块级作用域

js中没有块级作用域

四、变量

1、全局变量

在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)。

  • 注意:如果在函数内部,没有声明直接赋值的变量也属于全局变量
  • 只有在浏览器关闭的上海才会销毁,比较占内存
  • 全局变量在代码的任何位置都可以使用

2、局部变量

在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)

  • 只能在函数内部使用
  • 函数内部声明的变量就是局部变量
  • 函数的形参实际上就是局部变量
  • 当我们程序执行完毕就会销毁

五、作用域链

1、定义

只要是代码都一个作用域中,写在函数内部的局部作用域,未写在任何函数内部即在全局作用域中;

如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域;

根据在**[内部函数可以访问外部函数变量]**的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链

2、作用域链:

采取就近原则的方式来查找变量最终的值。

六、预解析

1、js引擎如何执行 js代码

先进行语法校验,再进行预解析,最后执行代码

  • 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。

  • 代码执行: 从上到下执行JS语句。

    预解析会把变量和函数的声明在代码执行之前执行完成。

1、语法校验阶段报错:

整个js 文件都不会运行 (了解)

2、代码执行阶段报错:

从当前位置开始下面的js 都不会执行 (了解)

2、变量预解析

变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。

3、函数预解析

函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。

函数表达式提升? 不存在函数提升,只存在变量提升

(拓展)函数和变量同时提升:

​ // 函数声明的优先级高于变量声明,但不高于变量赋值

七、对象(object)

1、定义

对象是一组无无序的相关属性和方法的集合,所有的事物都是对象

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

2、创建对象的三种方法

1、字面量创建对象

var 变量名 = {

属性1'',
属性2'',
方法名:function(){...};//方法冒号后面跟的是匿名函数//注意:属性之间要用逗号隔开

调用对象属性:

1)console.log(变量名.属性1)2)console.log(变量名['属性1'])

调用对象方法:

变量名.方法名;

2、利用new Object 创建对象

var andy = new Obect();

添加对象属性使用的格式:对象.属性 = 值;

3、利用构造函数创建对象

格式:

 function 构造函数名(形参1,形参2,形参3) {
 this.属性名1 = 参数1;
 this.属性名2 = 参数2;
 this.属性名3 = 参数3;
 this.方法名 = 函数体;
 }

调用格式:

var obj = new 构造函数名(实参1,实参2,实参3)
  • 构造函数约定首字母大写
  • 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  • 构造函数中不需要 return 返回结果
  • 当我们创建对象的时候,必须用 new 来调用构造函数

3、new关键字执行过程★★★★★

  1. 首先在内存中新增一块内存空间,存放将要创建的对象
  2. 用this关键字指向内存空间
  3. this添加属性方法
  4. 添加完成后,返回这个this,完成创建对象

4、遍历对象

for (变量 in 对象名字) {

for (变量 in 对象名字) {
     
// 在此执行代码
}
for (var k in obj) {
     
console.log(k);      // 这里的 k 是属性名
console.log(obj[k]); // 这里的 obj[k] 是属性值
}

你可能感兴趣的:(js基础,javascript,html5,html,前端)