函数注意事项
1、命名常规 驼峰命名法首字母小写
2、函数名后的()可带参数也不可
3、函数声明时 () 里带的参数为形参 ; 函数调用时 () 里带的参数为实参
4、形参与实参个数的实际联系 取决于实参 若实参个数 < 形参个数 则未赋值的形参值为undefined
5、函数默认返回值为undefined
6、除匿名函数外 函数的声明和调用没有前后之分(在同一个文档里)
7、匿名函数在调用时 必须放在匿名函数声明之后
s执行顺序
1、检查装载阶段 (声明变量提前、函数声明提前、检查js有没有语法错误)
2、执行阶段 (变量的赋值、函数的调用等)
闭包
闭包:闭包是由函数以及创建该函数的词法环境组合而成 可以使用函数之外定义的变量
在函数的内部在定义一个函数:函数2被包裹在函数1里面,函数1里面的所有局部变量对函数2都是可见的 此时函数2 就是闭包函数
(JS特有的"链式作用域"结构:父对象的所有变量对子对象都是可见的,反之则不成立)
定义在函数里的函数 就是一个闭包函数
闭包就是能够读取其他函数内部变量的函数,函数没有被释放,整条作用域链上的局部变量都将得到保留。
由于在javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成‘定义在一个函数内部的函数’。
所以,在本质上,闭包就是将函数内部和函数外部连接的一座桥梁。
var num = 1 ;
function func() {
alert(num) ;
}
func(); //1
function func1(){
var num1 =1 ;
}
alert(num1) ; //num1 undifined
答案:
弹窗 1
num1 is not defined
function func1(){
var num1 =1 ;
return num1;
}
alert(func1()) ; //回调函数
弹窗 1
// func2是闭包
function func1 () {
var num1 = " func 2 要调我"
function func2 (){
alert(num1);
}
return func2;
}
var fa = func1();
console.log(fa);
fa();
需要加深理解
弹窗 func 2 要调我
控制台 ƒ func2() {
alert(num1);
}
var nAdd ;
function f1() {
var n = 1 ;
nAdd = function() {
n+=1 ;
};
function f2(){
alert (n);
}
return f2() ;
}
var result = f1() ;
// nAdd; //没有值 空值
result() ; //弹窗 1
弹窗 1
function get(name) {
var name = " pig " ;
function fly() {
alert(name + " can fly ");
}
return fly;
}
var cat = get() ;
cat();
function get(name) {
var name = name;
function fly() {
alert(name + " can fly ");
}
return fly;
}
var animal = get("cat");
animal();
弹窗 pig can fly
var arr1 = [333, 222, 2, 4, 5, 45];
arr1 = arr1.filter(function (a) {
return a > 100;
})
alert(arr1);
答案:按照条件输出大于100的数