1.4函数
一.函数的声明及调用
1.关键字声明
function 函数名(){}
2.表达式声明
var f=function(){}
3.函数的调用
function f1(a,b){
c=a+b
console.log(c)
}
f1(3,5);
二.函数的返回值
如果函数中没有return,那么函数调用之后街道的返回值就是Underfined
如果函数中有return,但return后面没有值,那么函数调用之后返回值就是Underfined
函数中return之后,不管有什么代码,均不执行,return后函数的调用结束
var f=function(a,b){
c=a+b
return c;
}
var h=f(3,4)
console.log(h)
三.匿名函数与自调用函数
1.表达式声明:把函数本身赋值给变量
var fun=function(){}
2.自调用函数
(function(a,b){
c=a+b
console.log(c)
}(2,3))
四.函数作为数据类型的两种用法
1.回调(将函数作为一个值传入另一个函数中执行)
function f1(s){
s();
}
function f2(){
alert("我\"喜欢\"黑马'程序员'")
alert('我\'喜欢\'黑马"程序员"')
}
f1(f2)
2.闭包(将函数作为值返回到外面)
function f1(a,b){
c=a-b
console.log(c)
// return c
function f2(g,h){
j=g%h
console.log(j)
}
return f2(9,4)
}
var j=f1
j(10,2) //8,1
五.作用域及js代码执行
1.作用域:变量可以起作用的范围与区域
函数里面就是局部作用域,函数外面那就是全局作用域
变量提升:在代码执行之前变量已经在编译阶段被声明了
JS代码的两个运行阶段:
1.解析(编译)阶段:语法检查,变量及函数进行声明,
2.运行阶段:变量的赋值,代码流程的运行
var a=12;
function abc(){
alert(a);
var a=10;//局部变量里又声明了a,所以不等于12
//又因为变量的提升,等于Underfined;
}
abc();
如果函数声明与变量同名,那么函数声明会替代变量声明
console.log(a);
function a(){
console.log('aaa');
}
2.作用域链
var a=3
function f1(){
var a=1
function f2(){
var a=3
function f3(){
var a=9
console.log(a)
}
f3()
}
f2()
}
f1()