函数
函数的声明
函数的声明
console.log(fn);
fn();
普通函数声明
function fn(){
console.log("aaa");
}
匿名函数声明
var fn=function(){
console.log("bbb");
}
fn();
普通函数声明,当进入该script开始的时候,普通函数就会被存在堆中
并且在栈中以函数名声明这个变量,并且指向堆中的这个函数,这种
函数写在任何位置都不影响当前的代码顺序,可以忽略这个函数描述的位置
都可以在任何位置调用到该函数
匿名函数声明,只有当代码运行到var 定义匿名函数位置的时候才可以声明
这个变量,并且指向堆中的这个匿名函数,在当前定义之前,栈中是没有
这个函数,所以在这个定义之前是无法调用该函数,只能在定义后调用
document.onclick=function(){
}
document={
onclick:function(){
}
}
这种就是自执行函数,允许到执行时执行内容
console.log(0);
(function(){
console.log("aaa");
})();
自执行函数的目的是为了保障函数内外的变量不会出现混淆
var a=3;
(function(){
var a=10;
console.log(a);
})();
console.log(a);
箭头函数 另类的匿名函数
如果参数是1位,可以省略括号,如果没有参数或者参数是1个以上就需要写括号
如果函数只有一句话,没有花括号,就表示返回里面的内容,如果有多句话必须写花括号
var fn=()=>{
}
var fn1=a=>++a;
var fn2=(a,b)=>a+b;
创建构造函数的函数实例
构造函数产生函数实例,可以在Function()参数中加入需要添加函数中的参数以及语句块
最后一个参数一定就是语句块,前面的参数都是函数的参数
var fn=new Function("a","b","c","console.log(a+b+c)");
fn(3,4,5);
var xhr=new XMLHttpRequest();
xhr.addEventListener("load",loadHandler);
xhr.open("GET","./a.txt");
xhr.send();
function loadHandler(e){
console.log( xhr.response);
// 将硬回车和软回车替换为空字符串,去除前后空格
var str=xhr.response.replace(/\r|\n/g,"").trim();
// 正则表达式提取,将函数结构正则描述,两处小括号分别对应提取的群组
// 第一个小括号提取函数参数部分,第二个小括号提取函数的语句块
var arr=str.match(/^function.*?\((.*?)\)\{(.*)\}/);
console.log(arr);
// 将字符串函数部分删除,并且去除前后空格
str=str.replace(arr[0],"").trim();
// 切割分号
var a=str.split(";");
// 根据群组1作为参数,群组2作为语句块创建函数
var fn=new Function(arr[1],arr[2]);
a.forEach(function(item){
item=item.replace(item.split(".")[0],"").slice(1);
var s=item.split("=");
if(s[0].trim().length==0)return;
fn[s[0]]=s[1];
})
fn(3,5);
for(var prop in fn){
console.log(prop);
}
}
a.txt文件
function abc(a,b){
for(var i=0;i<5;i++){
a++;
++b;
}
console.log(a*b);
}
abc.a=10;
abc.f=20;
浙公网安备 33010602011771号