1.对象
obj.name 中的name被称为属性名
* 属性名没有任何要求,任何值都可以作为对象的属性名
* 如果属性名太特殊了,则需要使用一个特殊的方式来设置:
* 语法:
* 对象[‘属性名’] = 属性值;
*
* 虽然如此,建议我们设置属性名时最好也遵循标识符的规范加粗样式****
*** 读取属性:
* 对象[‘属性名’]**
* let obj = Object();
* obj.name = ‘孙悟空’;
* let n = ‘name’;
* console.log(obj[n]);
1—(2)对象的可变类型;
对象属于可变类型,对象中所存储的属性是可以被修改的
修改变量时,由于变量与变量是相互独立,修改一个绝对不会影响其他变量
修改一个对象时,如果有其他的变量也指向该对象,
* 则其它的变量也会被影响到
1–(3)**
对象字面量:
使用字面量创建对象,可以在创建对象的同时向对象中添加属性
* 使用{}创建一个对象,
* 可以在对象中指定需要的属性
* 属性名和属性值之间使用:连接,以,结尾,
* 最后一个属性最好不要再写,**
1-(4)
对象字面量的属性枚举
for-in
* - for-in来枚举对象中的属性
* - 语法:
* for(let 变量n in 对象){
* 语句…
* }
*
* for-in会执行多次,
* 对象中有几个属性就执行几次
* 每次执行时都会将一个属性名赋值给变量
2
函数(Function)
* - 函数也是一个对象,也是用来存储数据的
* - 和普通对象不同,函数中可以用来存储代码,
* 而且可以在需要对其中的代码进行调用
* 函数声明:
* 语法:
* function 函数名(){
* 语句…
* }
*
* 调用函数:
* - 调用函数就是让函数中存储的代码执行
* - 语法:
* 函数对象()
*
* 使用typeof检查一个函数时,会返回 ‘function’ 表示是一个函数
*
2—(1)
函数的类别:
// 函数表达式
/ 以let var const开头的 都是函数表达式
- 语法:
* const ,let 变量 = function(){
* 语句…
* };
*/*
函数声明
直接是函数开头的就是函数声明
*
立即执行函数
语法:
(function (){
语句:
} ) ();
以这样开头的就是立即执行函数 同时没有函数对象
- 立即执行函数会在函数定义完毕后立即调用,只会调用一次
2—(2)
函数的参数:
形参(形式参数)
* - 在定义函数时,可以在函数的()中来定义数量不等的形参
* - 形参就相当于在函数中声明了对应的变量,
* 但是并没有实际的值
*
实参(实际参数)
* - 在调用函数时,可以向函数中传递数量不等的实参,
* 实参会赋值给对应的形参
* - 在JS中不会检查实参的类型和数量
* - 可以传递任意类型的实参
* - 可以传递任意数量的实参
* 如果数量一样,则实参和形参一一对应
* 如果实参少,则没有对应实参的形参是undefined
* 如果实参多,则多余的不会被使用
案例:
2----(3)函数的返回值
-
返回值是函数的执行结果
* - 在函数中可以使用return 来设置函数的返回值
* - 返回值可以是任意的数据类型
* - 如果return后不跟任何值,
* 或不写return则相当于return undefined
* - return 执行函数就结束了,
* return后的所有的代码都不会执行案例
3
对象的方法:
方法(method)
* - 对象的属性也可以是一个函数
* - 当一个对象的属性是函数时,我们就称这个函数是当前对象的方法
* 调用函数,称为调用对象的方法
* - 函数和方法只是称呼上的不同,没有什么太本质的区别
案例:
4.作用域:
作用域(scope)
变量的作用范围:
全局作用域
局部作用域{
块作用域
函数作用域
}
全局作用域
—在我们网页打开时创建 关闭时销毁
—所有的直接写在标签中的都位于全局作用域
全局作用域中的所有变量,被称为全局变量,可以在页面的任意位置被访问
* 全局作用域中的所有函数,被称为全局函数,可以在页面的任意位置被调用
* - 在JS中有一个全局对象(global object)叫做window,
* 在全局作用域中所有使用var声明的变量都会作为window对象的属性保存
* 在全局作用域使用function定义的函数会作为window对象的方法保存
* 函数实际上就相当于window对象的方法
5.
变量的提升
* - 在JS中所有使用var声明的变量,会在所有的代码执行前被声明
* 也就是说我们可以在一个变量声明前就对其进行使用
* 变量的提升只会提前声明,而不会提前赋值
* - 不使用var声明的变量不会被提升,所以不能在声明前使用
*
* 函数的提升
* - 在JS中所有以function开头的函数,会在所有的代码执行前被创建,
* 所以我们可以在函数声明前就对其进行调用
* - 使用函数表达式所定义的函数不会被提升,所以无法在声明前进行调用
*
*
* JS的代码时如何执行的?
* 1.预解析代码
* - 找到代码中所有的使用var声明的变量,以function开头的函数
* - 对var声明的变量进行提前声明,对于function开头的函数进行创建
* 2.逐行执行代码
声明变量时可以省略var或let 也就是相当于window.a=10;
6.函数作用域:
函数作用域在函数调用时创建,在调用结束时销毁
* - 函数每次调用都会产生一个新的函数作用域,函数作用域与函数作用域间相互独立
* - 在函数作用域中声明的变量是局部变量,
* 局部变量只能在函数内部访问,无法被外部访问
* - 在函数内部,使用var声明的变量和使用function开头的函数也会被提升,
* 函数作用域其实就是一个小的全局作用域
* - 如果在函数内部声明变量时,省略var或let,则变量默认会成为全局变量(不希望出现)