作用域
1.es5之前没有快级作用域(原因是var定义的变量都是全局的)
2.函数内部有自己的作用域,外部无法访问函数内部的作用域,但函数a内部如果再次定义函数b,b函数是可以使用a函数的变量的
3.变量有局部变量,外部变量,全局变量
局部变量:定义在函数内部,只限函数内部调用
外部变量:假如函数外部有变量,函数内部去访问函数外部的变量
全局变量:定义在script中,最上层的变量,全局变量会加到window对象中,可以在window对象找到,对任何函数都可见
函数和函数表达式
函数表达式和函数的区别:
1.语法不同
2.函数表达式必须先声明再调用,函数却可以在声明之前调用(原因为js的编译,会在调用之前先编译全局函数)
函数表达式调用:
var test = function(){ console.log('测试') }
函数作为头等公民非常的灵活:
1.函数可以传值给变量
例如: let foo = function(){ console.log("sss")}
2.函数可以在变量中来回传递
例如: let foo = function(){ console.log("sss")} let foo2=foo
3.函数可以当做参数传递
例如 let foo = function(){ console.log("sss")} function x(foo){ foo()}
4.函数可以当做返回值
例如 let foo = function(){ console.log("sss")} function x(foo){ return foo() }
5.函数可以放到数据结构中
例如 let test = { a:'',function test(){}}
函数回调
4中其实可以认为是一个函数的回调,函数回调其实就是将一个函数传入并在此函数中调用,就被称之为函数的回调,可以用作函数的异步处理
例如:
foo("url",function(res){
console.log(res)
})
function foo(url,fn){
console.log("函数回调第一个入参"+url)
let list = ["横说竖说"]
fn(list)
}
上面代码中fn,可以被称之为一个匿名函数
如上,存在传入一个函数或者多个函数且返回的被称为高阶函数
今天先到这.......