JavaScript 作用域 预解析导读 对象

目录

1.作用域

1.1作用域概述

2.变量的作用域

2.1 变量作用域的分类

 2.2全局变量

2.2局部变量

2.3全局变量和局部变量的区别

3.作用域链

 JavaScript 预解析导读

1. 我们JavaScript引擎运行js分为两步: 预解析  代码执行

2.预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

JavaScript 对象

1.对象

1.1什么是对象?

 1.2为什么需要对象

2.创建对象的三种方式

2.1利用字面量创建对象

 2.2利用new Object 创建对象

2.3利用构造函数创建对象

2.创建对象的三种方式

2.4构造函数和对象

3.new 关键字

4.遍历对象属性


1.作用域

1.1作用域概述

通常来说,一段程序代码中所用到的名字不是有效和可靠的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序的局部性,增强了程序的可靠性,减少了名字冲突。

  • JavaScript作用域:就是代码名字的(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要的是减少命名冲突
  • JavaScript 的作用域(es6)之前:全局作用域  局部作用域
  • 全局作用域:整个script 标签 或者是一个单独的js文件
  • 局部作用域 (函数作用域)在函数内部就是局部作用域  这个代码的名字只在函数内部起作用效果和作用

2.变量的作用域

2.1 变量作用域的分类

在JavaScript中,根据作用域的不同,变量可以分为两种:

  • 全局变量     在全局作用域下的变量,在全局下都可以使用
  • 局部变量     在局部作用域下的变量  后者在函数内部的变量就是局部变量

 2.2全局变量

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

  • 全局变量在代码的任何位置都可以使用
  • 在全局作用域下var 声明的变量 是全局变量
  • 特殊情况 在函数内不使用 var声明的变量也是全局变量(不建议使用)

2.2局部变量

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

  • 局部变量只能在该函数内部使用‘
  • 在函数内部var 声明的变量是全局变量
  • 函数的形参实际上就是局部变量 

2.3全局变量和局部变量的区别

  • 全局变量: 在任何一个敌方都可以使用,只有在浏览器关闭时候才会被销毁,因此比较占内存
  • 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码运行结束后,就会被销毁,因此更节省内存空间 

1.4 JS没有块级作用域

es6 新增了块级作用域 

3.作用域链

  • 只要是代码,就至少有一个作用域
  • 写在函数内部的局部作用域、
  • 如果函数中还有函数,那么在这个作用域中就可以诞生一个作用域
  • 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定那些诗句能被内部函数访问,就称作作用域链 

 JavaScript 预解析导读

JavaScript代码执行是由浏览器中的JavaScript解释器来执行的。JavaScript解释器在运行JavaScript代码的时候分为两步:预解析和代码执行。

1. 我们JavaScript引擎运行js分为两步: 预解析  代码执行

  • 预解析 js 引擎会把js 里面所有的var  还有 function 提升到当前作用域的最前面
  • 代码执行 按照代码书写的顺序从上而下执行

2.预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

  • 变量提升 就是把所有的变量提升到当前的作用域最前面  不提升赋值操作
  • 函数提升 就是把所有的函数申明提升到当前作用域的最前面  不调用函数 

JavaScript 对象

1.对象

1.1什么是对象?

对象:是一个具体的事物。例如:数据库,一个网页,一个远程服务器的连接也可以是对象。

在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串,数值,数组,函数等。

对象是由属性和方法组成的。

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

 1.2为什么需要对象

保存一个值,可以使用变量,保存多个值(一组值)时,可以使用数组。

例如:保存一个人的完整信息。使用js 的对象表达式更加强大。

2.创建对象的三种方式

在JavaScript中,现阶段我们可以采用三种方式创建对象(object)

  • 利用字面量创建对象
  • 利用new object 创建对象 

2.1利用字面量创建对象

对象字面量:就是换括号{ } 里面包含了表达式具体事物(对象)的属性和方式。 

对象的调用

  • 对象里面的属性调用:对象.属性名, 这个小点。就理解为"的"
  • 对象里面属性的另外一种调用方式:对象['属性名'],注意方括号里面的属性必须加引号,后续会使用
  • 对象里面的方法调用:对象.方法名(),注意这个方法名字后面一定加括号

 变量,属性,函数,方法总结

  • 变量:单独声明赋值,单独存在
  • 属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征
  • 函数:单独存在的,通过"函数名()" 的方式就可以调用
  • 方法:对象里面的函称为方法,方法不需要声明,使用“对象.方法名()”的放还是可以调用,方法用来描述该对象的行为和功能。

 2.2利用new Object 创建对象

var obj = new Object();   //创建了一个空的对象

  • 我们是利用 等号 = 赋值的方法  添加对象的属性和方法
  • 每个属性和方法之间  分号结束

2.3利用构造函数创建对象

构造函数  : 是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始化值,他总与new运算符一起使用。我们可以把对象中的属性和方法抽取出来,然后分装到这个函数里面。

构造函数语法格式:
function 构造函数名() {

        this.属性 = 值;

        this.方法 = function()  { } 

}

使用: 

new 构造函数名();

2.创建对象的三种方式

2.4构造函数和对象

  • 构造函数,如 Stars(),抽象了对象的公共部分,分装到了函数里里面,它泛指某一大类(class)
  • 创建对象,如 new Stars() 特指某一个,通过 new 关键字创建对象的过程我们称之为对象实例化 

3.new 关键字

new 在执行时会做四件事情:

  1. 在内存中创建一个空的对象
  2. 让 this 指向这个新的对象
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面不需要return)

4.遍历对象属性

for...in 语句用于对数组对象的属性进行循环操作。

基本格式:

for (变量 in 对象) {

           console.log(k);                 // k 变量 输出  得到的是 属性名

            console.log(obj[k]);         // obj[k] 得到是 属性值

        }

对象小结:

  1. 对象可以让代码结构更清晰
  2. 对象复杂数据类型object 
  3. 本质:对象就是一组无序的相关属性和方法集合。
  4. 构造函数泛指某一大类,比如苹果,无论红色还是绿色都称为苹果
  5. 对象实例特指一个事物。
  6. for...in 语句用于对对象的属性进行循环操作。

你可能感兴趣的:(JavaScript,javascript,前端,java)