js第五天
作用域
通常来说,一段程序中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。简单来说就是代码名字在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要的是减少命名冲突。
作用域:(es6)之前,分为全局作用域和局部作用域。
全局作用域:整个 script 标签或一个 js 文件。
局部作用域:函数内部。
变量作用域
变量的作用域:根据作用域不同可以将变量分为全局变量和局部变量。
全局变量:在全局作用域下的变量,在全局下都可以使用。
局部变量:在局部作用域下的变量,或者在函数内部声明的变量。
注意:在局部作用域或函数内部没有用 var 定义的变量是全局变量。

从执行效率来看全局变量和局部变量
1、全局变量只有浏览器关闭的时候才会销毁,比较占内存资源。
2、局部变量在程序执行完之后就会销毁,比较节约内存资源。
作用域链
根据在函数内部可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就成为作用域链。查找变量是根据就近原则。
预解析
js 引擎运行 js 时会分为两步:1、预解析,2、代码执行
预解析
预解析会把 js 里面所有的 var 和 function 提升到当前作用域的最前面。
预解析分为变量预解析(变量提升)和函数预解析(函数提升)。
变量预解析
把所有的变量声明提升到当前作用域的最前面,不提升赋值操作。
函数预解析
把所有的函数声明提升到当前作用域的最前面,不调用函数。
代码执行
按照顺序从上往下执行代码。
对象
在 js 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
属性:事物的特征,在对象中用属性来表示(常用名词)。
方法:事物的行为,在对象中用方法来表示(常用动词)。
创建对象的三种方式
1、利用字面量创建对象。
对象字面量:大括号 { },里面包含了表达这个具体事物(对象)的属性和方法。

里面的属性或方法采用键值对的形式,键 == 属性名 : 值 == 属性值,键和值之间用冒号隔开。多个属性和方法之间用逗号隔开。方法是冒号后面跟着一个匿名函数。
使用某个属性或方法:对象名.属性名/方法名。

2、利用 new Object 创建对象。
跟 new Array 创建数组一样。

这里是用等号赋值,多个属性之间用分号隔开。
3、利用构造函数创建对象。
构造函数:利用函数的方式创建对象,此时这个函数就是构造函数。里面封装的是对象。构造函数就是把对象里面一些相同的的属性和方法抽象出来封装到函数里。
构造函数的语法:function 构造函数名() { this.属性 = 值; this.方法 = function () { } }

使用:用 new 关键字配上构造函数名来使用。 new 构造函数名。

对象和构造函数的区别
1、构造函数抽取了对象的公共部分,泛指一大类。
2、对象特指一个具体的事物。
3、利用构造函数创建对象的过程称为对象的实例化。
new关键字执行过程
1、new 构造函数可以在内存中创建一个空对象。
2、this 会指向刚才创建的对象。
3、执行构造函数里的代码,给这个空对象添加属性和方法。
4、返回这个对象。
for…in 遍历对象
for…in 语法结构:for( 变量 in 对象 ) { 循环体 }

k 指的是对象里的属性,obj[k] 指的是属性里的值。

浙公网安备 33010602011771号