js中创建函数的三种方式及区别

Posted quehai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中创建函数的三种方式及区别相关的知识,希望对你有一定的参考价值。

1.函数声明

function sum1(n1,n2){
        return n1+n2;
    };

2.函数表达式,又叫函数字面量

var sum2=function(n1,n2){
        return n1+n2;
};

两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问;而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。

自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,且立即自动执行。

 

(function(n1,n2){
        console.log (n1+n2)
})(1,3);//4

 

另外几种自执行函数:

技术图片
   //可用来传参
    (function(x,y){
        console.log(x+y);
    })(2,3);

    //带返回值
    var sum=(function(x,y){
        return x+y;
    })(2,3);
    console.log(sum);

    ~function(){
        var name=‘~‘
        console.log(name);
    }();

    !function(){
        var name=‘!‘
        console.log(name);
    }();

    ;(function(){
        var name=‘;‘
        console.log(name);
    })();

    -function(){
        var name=‘-‘
        console.log(name);
    }();

    //逗号运算符
    1,function(){
        var name=‘,‘;
        console.log(name);
    }();

    //异或
    1^function(){
        var name=‘^‘;
        console.log(name);
    }();

    //比较运算符
    1>function(){
        var name=‘>‘;
        console.log(name);
    }();

    ~+-!(function(){
        var name=‘~+-!‘;
        console.log(name);
    })();

    ~!(function(){
        var name=‘~!‘;
        console.log(name);
    })();

    (function(){
        var name=‘call‘;
        console.log(name);
    }).call();

    (function(){
        var name=‘apply‘;
        console.log(name);
    }).apply();
技术图片

3.函数构造法,参数必须加引号

var sum3=new Function(‘n1‘,‘n2‘,‘return n1+n2‘);
console.log(sum3(2,3));//5

从技术角度讲,这是一个函数表达式。一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。

var name=‘haoxl‘;
    function fun(){
        var name=‘lili‘;
        return new Function(‘return name‘);//不能获取局部变量
    }
 console.log(fun()());//haoxl

 Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象,所以当在一个循环或频繁执行的函数中调用Function()构造函数效率是非常低的。而函数字面量却不是每次遇到都会重新编译的,用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

以上是关于js中创建函数的三种方式及区别的主要内容,如果未能解决你的问题,请参考以下文章

java中创建线程的三种方法以及区别

Java中创建线程的三种方法以及区别

spring中创建bean对象的三种方式以及作用范围

js中创建对象方式

JS创建对象的几种方式

JAVA中创建线程的三种方式