js(es5)定义函数三种形式笔记js(es5)定义函数三种形式笔记
1. 定义函数3种形式:
1. function语句形式定义函数
2. function直接量定义函数
3. Function构造函数形式定义函数
实例1:三种形式的写法
//语句形式定义函数
function test1(){
alert("hello function1");
}
//直接量形式定义函数
var test2=function(){
alert("hello function2");
}
//直接量形式定义函数
var test3=new Function("a","b","return a+b");
//调⽤函数
test1();//输出hello function1
test2();//输出hello function2
alert(test3(1,2));//输出3
三种函数的对⽐:
三种函数形式效率对⽐:
1. function语句形式效率⽐构造函数形式效率⾼;
2. function语句形式声明后会占⽤内存,但是构造函数形式定义函数调⽤完毕后会从内存中清除;
3. ⽤法:如果调⽤次数多就使⽤语句式,如果只调⽤⼀次就⽤构造函数式;
原因:构造函数每new⼀次就会创建⼀次函数,⽽function语句只声明⼀次;
实例2:效率对⽐
var d1 = new Date();
var t1 = d1.getTime();
js调用方法的三种写法
for(var i =0 ; i <100000;i++){
//function test1(){;}
//var test2 = new Function();
}
var d2 = new Date();
var t2 = d2.getTime();
alert(t2 -t1);
//语句式执⾏时间11-15毫秒,构造函数式执⾏时间1-5秒左右
function语句形式优先被js解析器解释:
test1();//打印test1
function test1(){
alert("test1");
}
alert(test2);//undefined 声明了,但是没有赋值
test2();//报错:test2 is not function
var test2=function(){
alert("test2");
}
解析顺序案例:
function f(){return 1;}    // 函数1
alert(f());  //返回值为4 说明第1个函数被第4个函数覆盖
var f = new Function("return 2;");  // 函数2
alert(f());  //返回值为2 说明第4个函数被第2个函数覆盖
var f = function(){return 3;}  // 函数3
alert(f());        //返回值为3 说明第2个函数被第3个函数覆盖
function f(){return 4;}    // 函数4
alert(f());  //返回值为3 说明第4个函数被第3个函数覆盖
var f = new Function("return 5");  // 函数5
alert(f()); //返回值为5 说明第3个函数被第5个函数覆盖
var f = function(){return 6 ;}  // 函数6
alert(f());  //返回值为6 说明第5个函数被第6个函数覆盖
/
/结果:423356 注意:js中没有重载概念,先解释function语句式
函数作⽤域案例:
var k = 1 ;
function t1(){
var k = 2 ; //局部变量
function test(){return k ;}
//var test = function(){ return k};
//var test = new Function('return k;');
alert(test());
}
t1();// 输出2
var k = 1 ;
function t1(){
var k = 2 ; //局部变量
//function test(){return k ;}
var test = function(){ return k};
//var test = new Function('return k;');
alert(test());
}
t1();// 输出2
var k = 1 ;
function t1(){
var k = 2 ; //局部变量
//function test(){return k ;}
//var test = function(){ return k};
var test = new Function('return k;');
alert(test());
}
t1();// 输出1 由于构造函数式具有顶级作⽤域关系,所以,不到局部变量这段代码相当于下⾯这段代码var test = new Function('return k;');
var k = 1 ;
function t1(){
var k = 2 ; //局部变量
//function test(){return k ;}
//var test = function(){ return k};
alert(test());
}
t1();// 输出1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。