概述 一堆可以反复调用的代码块
具名函数
声明方式
function x(输入1,输入2){ //输入
return undefined // 输出 '写不写return 都默认会有'
}
变量和函数的区别 变量可以是函数 (7中数据类型 number string Object 等等), 但函数只能是对象里边的函数
变量的特例
函数的名字 x
console.log(x) 括号内只会接收字符串 不是字符串会自动调用toString() 每个对象都有toString()方法
匿名函数
var x x= function(input1,input2){ return}
不能单独使用 声明的函数必须赋给一个变量
具名函数 也赋给一个赋给变量
var x=function y(input1,input2){return
只有此 function内才可以访问
外边访问不到
}
不等同与下面这种方法 function y(v1,v2){ return }
'不一致性'
window.Function 函数对象
new function('x','y','return x+y')
箭头函数
(x,y)=>{return x+y }
例子
1).sum=(x,y){return x+y} 2).sum=(x,y)=>x+y 箭头后 只有一句话 可以省略花括号 3).sum=x=>n*2 参数只有一个可以省略小括号
函数的name属性
如果声明一个函数 那么这个函数的 .name属性就是她的名字


###########################################################
function 求三角形面积(x,y){ var m=x*y var n=m/2 return n }
求三角形的面积(33,66) 求三角形的面积(66,99)
可以反复调用
函数的存储 是以字符串定时存储
函数名.toString()
evel('1+1') 给什么字符串都当到代码执行
//2
函数名字.call() apply bind
.this() .arguments()
arguments看起来像是个数组 她的__proto__ 是Object 她的原型链没有Array.pototype 没有.push() 属性


call stack 调用栈
先进后出

作用域
闭包
如果一个函数使用了他范围之外的变量 那么(这个函数+这个变量) 就叫做闭包