JavaScript 作用域
全局作用域
作用于整个代码行 在 script 标签内部 或者一个独立的js 文件
全局作用域的生命周期
声明变量后 在我们打开页面时候变量初始了,当我们关闭页面后变量才会销毁
局部作用域
作用于 函数 内的代码环境 就是局部作用域,在es5之前只有函数可以限制
局部作用域的生命周期
当函数调用了 局部变量初始化了,当这个函数调用完毕,这个局部变量就销毁了
JavaScript 中没有快机作用域
js中没有快级作用域,js的作用域:全局作用域、局部作用域、现阶段我们js没有快级作用域 ,也可以说是 在es6 之前没有
js 在es6 之后新增的快级作用域
快级作用域 {}、 if{}、 for{}
作用域链
作用域链:内部函数访问外部函数的变量,采用的是链式查找的方式来决定取那个值,这种结果我们称为作用域链 ,采用的就近原则,谁近取谁
预解析
js 引擎在运行js 时 分为两步:预解析、代码执行
1,预解析 js 引擎会把 js代码中的 var 和 function 提升到当前作用域的最前面 但不进行赋值和调用
2,代码执行 按照代码顺序依次执行
变量提升:就是把所有变量声明提到当前作用域的最前面 ,不进行赋值操在
函数提升:就是把所有函数声明提到当前作用域的最前面 ,不进行调用函数
对象
在JavaScript 中,对象是一组无序的相关属性和方法的集合,所有事物都是对象,例如字符数组,数值,函数等
对象是有属性和方法组成的
注意 函数表达式 调用函数必须在函数后面调用
创建对象的三种方式
利用字面量创建对象
var obj = {}
利用new Object创建对象
var obj = new Object
利用构造函数创建对象
function Obj(name,exe){
this.name = name,
this.exe = exe,
}
var ldh = new Obj('刘德华','男')
注意点 构造函数 的首字母要大写
对象的使用
- 对象的属性
- 对象中存储具体数据的 "键值对"中的 "键"称为对象的属性,即对象中存储具体数据的项
- 对象的方法
- 对象中存储函数的 "键值对"中的 "键"称为对象的方法,即对象中存储函数的项
- 访问对象的属性
-
对象里面的属性调用 : 对象.属性名 ,这个小点 . 就理解为“ 的 ”
-
对象里面属性的另一种调用方式 : 对象[‘属性名’],注意方括号里面的属性必须加引号
示例代码如下:
console.log(star.name) // 调用名字属性 console.log(star['name']) // 调用名字属性
- 调用对象的方法
-
对象里面的方法调用:对象.方法名() ,注意这个方法名字后面一定加括号
示例代码如下:
star.sayHi(); // 调用 sayHi 方法,注意,一定不要忘记带后面的括号
变量、属性、函数、方法总结
属性是对象的一部分,而变量不是对象的一部分,变量是单独存储数据的容器
- 变量:单独声明赋值,单独存在
- 属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征
构造函数返回值问题
如果在构造函数里 用return 返回基本数据类型 ,那么构造函数会忽略这个返回值 ,返回 this
如果在狗渣函数里 用return 返回复杂数据类型, 那么狗渣函数会忽略掉 this ,返回这个 复杂数据类型
new 在执行会做的四件事
- 在内存中创建以更新的空对象
- 让 this 指向这个新对的对象
- 执行构造函数里面的代码。给这个新对象添加属性合和方法
- 返回这个新对象(所以构造函数里面不需要 return )
遍历对象
for(var k in obj){
console.log(k)
console.log(obj[k])
}
这里 k 不需要赋值 ,输出得到的是属性名
obj[k] 得到的是属性值