arguments 此对象可以获取传入的每个参数的值
---------伪数组
匿名函数
命名函数
========================================================
命名函数------通过函数名调用
匿名函数—不能直接调用
通过函数表达式----》把一个函数给一个变量
var 变量=匿名函数
var f1 = function() {}
如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了
f1();
函数声明了同一个函数两次—(重名)后面的函数会把前面的函数覆盖
无论函数的调用写在哪 都只会显示后面函数声明的内容
函数表达式-与赋值相同
后面赋的值会覆盖前面的,但是前面赋值,前面调用就是前面的值后面赋值覆盖后,调用就是后面的值
函数的自调用,没有名字,调用—声明同时,直接调用 一次性的
(function()){console.log();})();
函数也是一种数据类型 function
函数可以作为参数使用
function f1(fn) {
fn();
}
function f2() { console.log(“haha”)}
f1(f2);
函数作为参数使用不用加()
如果一个函数作为参数使用,那么我们说这个参数(函数)可以叫回调函数
函数可以作为返回值使用
function f1() {
console.log(“111”);
return function () {
console.log(“222”);
}
}
var ff=f1();----->函数进行调用,ff就作为一个函数接受返回值为匿名函数的函数
上面这种方式可以输出f1的函数输出的值,但是不能输出f1的返回值(匿名函数)中输出的内容
此时ff中存的是"111"以及匿名函数的代码
ff();---->要调用匿名函数,需要使用函数调用的方法
==================================================
作用域
全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变可以在页面的任何位置使用
全局变量如果页面不关闭,那么就不会释放,就会占空间,消耗内存
目前除了在函数中定义的变量,其他都是全局变量
局部变量:在函数的内部定义的变量,外面不能使用
隐式全局变量:声明的变量没有用var
var num1=10; ---->全局变量
num2 =20;------>隐式全局变量
delete num1;---->不能删除
delete num2;---->可以删除
delete 变量名; 不能删除全局变量 可以删除隐式全局变量
全局作用域:全局变量的使用范围
局部作用域:局部变量的适用范围
块级作用域:一对大括号为一块 ,在这块区域定义的变量,只能在这块中使用
但是js中块级内定义的在块级外也能使用 所以js中没有块级作用域(函数除外)
作用域链
在函数中调用script便签后为0级作用域,一级一级往上找3—>2—>1—>0没找到报错
var num = 10;-----------------------------------0级作用域
|
function f1(){------------------------------------1级作用域
var num = 20;
function f2(){---------------------------------2级作用域
var num = 30;
function f3(){------------------------------3级作用域
var num = 40;
console.log(num);
}
}
}
==========================================
预解析
就是在解析代码之前做的事
预解析会把变量的声明提前 赋值不会提前
函数调用会直接把函数声明提前
f1();
var num = 0;
function f1() {
console.log(num);
}
函数的执行结果是undefined
预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
函数的变量只会提前到函数的作用域的最前面,不会出去
快速识别预解析的结果
var a=25;
function abc() {
alert(a);
var a =10;
}
输出结果undefinder 预解析优提升函数内部
console.log(a);-------->函数a的代码s
var a;
function a() {
console.log(‘aaaa’);
}
console.log(a);-------->函数a的代码
变量和函数重名了 函数吧变量覆盖了 所以输出a的代码
a=1;
console.log(a);-------->1
f1();
console.log©; -------->9
console.log(b); -------->9
console.log(a); -------->报错
function f1() {
var a = b = c = 9;
console.log(a);-------->9
console.log(b);-------->9
console.log©;-------->9
}
第一个a报错的原因
预解析时
function f1() {
var a = b = c = 9;
console.log(a);-------->9
console.log(b);-------->9
console.log©;-------->9
}
f1();
console.log©; -------->9
console.log(b); -------->9
console.log(a); -------->报错
|
|
|
|
function f1() {
var a; 函数局部变量
a=9;
b=9; 隐式全局变量
c=9; 隐式全局变量
console.log(a);-------->9
console.log(b);-------->9
console.log©;-------->9
}
f1();
console.log©; -------->9
console.log(b); -------->9
console.log(a); -------->报错
f1();------->报错 f1 is not a fuction
var f1=function () {
console.log(a);
var a = 10;
};
报错原因:
预解析过程
var f1;
f1();
f1=function () {
console.log(a);
var a = 10;
};
================赋值多个变量
var sum= 0,average= 0,evensum= 0,oddsum= 0,result= 0;