一.匿名函数
概念:没有名字的函数
匿名函数的自调用:第一种(function(){
...
})();
第二种(function(){
...
}());
通过函数表达式声明的函数
函数表达式声明:
var getDay=function(){...};
//通过函数表达式声明的函数,调用时,getDay()----代表返回值
getDay-----代表的为整个函数体
二.arguments
在调用函数时,浏览器每次会传递进两个隐含的参数
-----------上下文对象,this
-----------arguments
arguments:是一个伪数组,用户输入或传递参数的集合,在函数内部存在
可获取用户输入的值和传多少参数,即可以提取实参,存储起来,拥有长度
function getSum(){
var sum=0;
for(var i=0;i<=arguments.length-1;i++){
sum+=arguments[i];
}
return sum;
}
console.log(getSum(1,2,3)); //6
三.作用域
**概念:变量可以起作用的范围**
----------全局变量:var声明----可以在程序的任何地方声明,除了函数
----------局部变量:作用于局部的范围,eg:在函数内声明的变量,只能作用于函数的内部,并不
能作用于其他位置
块级作用域:
块级作用域: 任何一对{..}中包含的就是块级作用域,现阶段js可以被看作并没有块级作用域
eg:{..}声明的变量在括号外仍然可以被使用,,,函数除外!!!!
////函数内--var--声明的变量只能作用于函数内部,函数外并不能被使用
没有用“var”声明的变量------会成为全局变量(隐式全局变量)
隐式全局变量和全局变量
隐式全局变量:没有用var 声明的变量----------num=12;
全局变量:在全局作用域中用var 声明的变量--------var num=12;
---隐式全局变量------可被删掉---delete (变量)-----
---全局变量----并不能被删除。除非页面关闭-----无用的全局变量可能会造成内存泄漏
作用域链
作用域链是函数被创建的作用域中对象的集合,其中的对象是包括-----,
-----作用域中的变量对象(声明的变量),局部的变量对象,全局的变量对象
eg:
全局作用域---0级作用域
函数内部---1级作用域
函数内部的内部---2级作用域
//变量会从当前的作用域往外查找,找到离之最近的作用域中查找此变量是否声明,
-----有,直接输出,没有,接着往外查找(父级作用域)
function f1(){
var num=10;
function f2(){
var num=20;
function f3(){
var num=30;
}
f3();
}
f2();
}
f1();
预解析:
浏览器在解析js代码时会提前将变量的声明和函数的声明提升到
---------------当前作用域的最前面,但并不会将其赋值提升
console.log(num); ////undefined
var num=10;
cosole.log(num); ////10
f1(); //输出----函数
function f1(){ //将函数声明提升到最前面
cosole.log("函数");
}
转变成:
function f1(){
console.log("函数");
}
f1();
f2(); //将会报错!!!!,并没有f2()此种写法
var f2=function(){...};
转变成:(将var f2提升到作用域的最前面去,此时并没有给f2赋值为函数)
var f2;
f2();
function(){...};