js之函数一

1、三种定义函数的方式

function语句形式

function test1(){
        alert('我是test1');
    }
    test1();

函数直接量形式

var test2 = function(){
    alert('我是test2');
}
test2();

通过Function构造函数形式定义函数

var test3 = new Function("a" , "b" ,"return a+b;");
alert(test3(10,20));

2、三种方式效率比对

function语句形式和函数直接量形式一次加载进内存,只创建一次,占用内存,效率快

通过Function构造函数形式定义函数使用一次创建一次,效率慢

测试:

var d1 = new Date();
var t1 = d1.getTime();
for(var i =0 ; i <100000;i++){
    //function test1(){;}       //function语句的形式
    var test2 = new Function();
}
var d2 = new Date();
var t2 = d2.getTime();
alert(t2 -t1);      

结果:
100000万次循环

function test1(){;}只用了10~20毫秒效率快
new Function()用了80~100毫秒效率慢


3、三种方式解析顺序 比对

function语句形式优先解析

函数直接量形式和通过Function构造函数形式定义函数是顺序解析

测试:

    function test1(){
        alert('1111');
    }

    test1();


    var test2 = function(){
        alert('2222');
    }

    test2();

结果:
弹出111
弹出222

说明从上到下顺序执行都是没问题的

    test1();
    function test1(){
        alert('1111');
    }


    test2();
    var test2 = function(){
        alert('2222');
    }

结果:
弹出111
控制台输出:Uncaught TypeError: test2 is not a function
at 1.html:17

test1可以理解为window的一个变量,并且知道是一个函数,javascript解析器会优先的解释,直接调用没问题

test2也可以理解为window声明的一个变量,但是还没有被赋值,直接调用报错,因为还不知道它是一个函数


4、三种方式作用域方面 比对

function语句形式和函数直接量形式都具有函数的作用域

通过Function构造函数形式定义函数具有顶级函数(顶级作用域)

测试:

var k = 1 ; 
function t1(){
    var k = 2 ; //局部变量 k
    function test(){return k ;}     //function语句
    // var test = function(){ return k};    //函数直接量
    //var test = new Function('return k;'); // 构造函数的方式
    alert(test());
}
t1();

结果:

function test(){return k ;} 输出2 函数作用域
var test = function(){ return k};输出2 函数作用域
var test = new Function(‘return k;’);输出1 顶级作用域


总结:
三种方式创建函数的比较

比较方向function语句Function构造函数函数直接量
兼容完全js1.1以上js1.2以上
形式句子表达式表达式
名称有名匿名匿名
性质静态动态静态
解析时机优先解析顺序解析顺序解析
作用域具有函数作用域顶级函数(顶级作用域)具有函数作用域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值