函数
含有不定条语句的代码块,可以反复使用,可以传递参数,可以返回值
1. 声明
- function
function name(){
}
name();
- 函数表达式
var name = function(){
}
name();
注意 这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression),因为赋值语句的等号右侧只能放表达式。
采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。
2. 函数提升
- 用function声明函数,整个函数会像变量声明一样,被提升到代码头部。所以,下面的代码不会报错。
- 用函数表达式声明函数,调用要在声明后才有效
作用域链
代码例子:
var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //输出多少
输出为2
fn() = fn1(),返回fn3(),fn3()调用fn2(),输出a,fn2()没有定义a,向上级查找,a=2
像这样内部函数用链式查找访问外部函数变量的这种机制称为作用域链
- 函数在执行的过程中,先从自己内部找变量
- 如果找不到,再从创建当前函数所在的作用域去找, 以此往上
- 注意找的是变量的当前的状态
网友评论