for…in 和 for…of 的区别:
for…in一般用来遍历对象,key是属性名,key是字符串类型
for…of一般用来遍历可迭代的对象(array,string…),key是属性值
变量提升和函数提升
1.变量提升,只提升变量名,不提升赋值
2.函数提升(function 函数名(){}),提升是函数体
3.变量名和函数名重名,函数提升优先级高于变量提升
函数声明和调用
1.声明函数
声明式: function关键字声明 function 函数名(){}
表达式: var 变量名 = function(){} //可以省略函数名
2.调用函数: 函数名()
如果不调用,函数内部的代码块不会被执行
函数的返回值和函数传参
1.函数的返回值:函数执行的结果
return关键字
1.1 函数中没有return关键字,函数的返回值是undefined
1.2 函数中有return关键字,但是return关键字后没有数据,函数的返回值是undefined
1.3 函数中有return关键字,return关键字后有数据(任意数据类型),函数的返回值是return后面的数据
注意:
return返回数据之后,后面的代码不会被执行
2.函数传参
形参:变量,在function声明后的小括号中,相当于在函数内部声明的变量,多个形参用,分隔开
实参:实际的参数,写在函数调用的小括号中,多个实参用,分隔开 实参可以是任意数据类型
传参是一一对应的关系
arguments对象
1.arguments对象(类数组对象)
类数组对象特点:
类数组有长度:元素的个数不能使用数组的方法
获取类数组中的元素:arguments[index] —index从0开始
作用域
作用域:变量使用的范围
全局变量:在web区域内声明的变量,function声明的变量,
局部变量:在function内部声明的变量,在函数声明的内部访问,函数外部不能访问局部变量
全局作用域:顶层对象window上作用的区域
局部作用域(函数作用域):function内部作用的区域,函数执行完毕,函数内部的变量和方法会立即销毁
1.全局预编译(代码执行之前执行的操作)
1.1 创建一个GO(Global Object)对象,相当于window对象
1.2 变量提升,找到var声明的变量,将变量名作为属性名添加到GO对象中,属性值为undefined
1.3 函数提升,找到function声明的函数,将函数名作为属性名添加到GO对象中,属性值为函数体
2.局部预编译(函数预编译):代码执行之前执行的操作
2.1 创建一个AO(acnative Object)对象
2.2 变量提升,找到var声明的变量和形参,将变量名和形参名作为属性名添加到AO对象中,属性值为undefined
2.3 将实参赋值给形参
2.4 函数提升,找到function声明的函数,将函数名作为属性名添加到GO对象中,属性值为函数体