函数的作业:能够被描述某种功能:实现某种功能。
函数的声明方式:三种:
1.利用关键字function声明:
function fn(){}2.函数表达式:
var fn = function(){}3.利用new 和Function关键字声明
var fn = new Function('参数','函数体') var fn = new Function('a','b','return a + b') //后面必须的字符串的形式,函数体是放在最后面的重复声明,同一个名字的函数,后面的函数会覆盖前面的函数
每个函数不管设没设置return , 函数体执行完了都会默认返回一个值
没设就是undefined:设置了就返回设置的那个值;
而且函数只能返回一个值;所以当我们想要返回多个值得时候;
我们必须的把他变成数组或者对象或者字符串;
而且函数体只要执行了return:函数体就会停止运行;也就是说如果
后面还有代码块:也不会被执行。
函数的参数:————形参————实参
形参:函数声明时定义的参数;类似于变量是虚的
实参:函数执行时传入的值:
函数参数的传入方式:对位传参————对象传参
1对位传参:就是传入的参数位置是相互对应的:
2.对象传参:当我们传入的参数量过大时,不好区别他们的位置对应,
所以我们使用对象传参解决这一问题
function fn(obj){ console.log(obj.name+obj.age+obj.height) } var obj ={ name:'zhangs', age:18, height:180 }为了避免我们在没有传参的时候就调用执行了函数——让其返回了undefined;
我们就会在函数声明的时候为他们添加默认值:3 中方式:
1,es5的方法:三目运算
function fn(a){ a= a==undefined ? 5 : a; //5 是我们设置的默认参数 console.log(a) }2.es5的方法:逻辑或
function fn(a){ a= undefined || 5 //5是我们设置的默认值 console.log(a) }3、es6的直接赋值发:
function fn(a=5){ //5 是我们设置的默认值 console.log(a)}arguments————实参列表,是一个类数组;有length属性:
把类数组转换成数组的2种方法:
//1 var arr = Array.prototype.slice.call(arguments) //相当于利用call改变数组的this的指向 利用数组的slice属性剪切返回出新的数组再赋值: //2 var arr = Array.from(arguments) //这个方法以后是常用的 //DOM中获取的集合也是类数组,也会用到这个方法作用域分为三块:
块级作用域:只在if判断、for循环等语句里面有效,需要使用let关键字声明 {} 内的东西:
函数作用域:函数体里面用var 或者 let 声明 的变量。只能在函数体里面使用:
全局作用域:在全局用都有效,不管是let 还是var :
let 和 var 的区别:
var 可以重复对一个变量声明,let 不可以:
var 声明的变量 函数执行的前发生预编译会提升,let 声明的变量不会提升:
let 声明的变量只会在{ } 里面有效,var 不一定:比如在if或者for里面的时候:
函数的作用域AO——只能里面的可以访问外面的,不能反着来
全局的作用域GO 。。 GO===window
