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()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

原文地址:https://www.cnblogs.com/quehai/p/10825680.html

时间: 2024-11-05 18:29:44

js中创建函数的三种方式及区别的相关文章

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

1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2; }; 两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问:而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行. 自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,

JS中事件绑定的三种方式

以下是搜集的在JS中事件绑定的三种方式. 1. HTML onclick attribute <button type="button" id="upload" onclick="upload_file();"> 原文: http://www.w3school.com.cn/jsref/jsref_events.asp 2. jQuery .on() $(node).on("change", function(e)

创建函数的三种方式

一.创建函数的三种方式: 二.自调用函数(立即执行函数) 作用:立即开启一个新的作用域,避免污染全局命名空间 原文地址:https://www.cnblogs.com/qqinhappyhappy/p/11603480.html

javascript创建函数的三种方式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=

js中回调函数的三种写法

回调函数的三种写法: 1.通过指针来调用 2.通过匿名函数来调用 3.定义与执行同时进行 // 通过指针来调用 function math(num1,num2,callback){ return callback(num1 , num2); } function aa(num1,num2){ return num1 + num2; } function bb(num1,num2){ return num1 - num2; } console.log( math(2,1,aa) ); // 3 c

React创建组件的三种方式及区别

React创建组件具体的三种方式: 1.函数式定义的无状态组件 2.es5原生方式React.createClass定义的组件 3.es6形式的extends React.Component定义的组件 虽然有三种方式可以定义React组件,但是它们有什么不同呢?什么情况下应该使用哪种定义方式呢?请继续往下看 接下来我们先说一下三种方式有什么区别? 1.无状态函数式组件 它是为了创建纯展示组件,这种组件只负责根据传入的props来展示,不涉及到要state状态的操作. 无状态函数式组件形式上表现为

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

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程 下面让我们分别来看看这三种创建线程的方法. ------------------------继承Thread类创建线程--------------------- 通过继承Thread类来创建并启动多线程的一般步骤如下 1]d定义Thread类的子类

js中创建数组的两种方式

第一种方式:var  array1=new Array(); 第二种方式:var array2=[元素1,元素2,元素3...]; 解析:当只传入一个元素并且是unmber时,这个元素代表的是数组长度. 说明:在JS中有空间在未使用之前,这个空间的类型是不确定的:导致什么类型的数据都可以给其中存放.

JAVA中创建字符串的两种方式的区别

我们知道,通常在Java中创建一个字符串会有两种方式,通过双引号直接赋值和通过构造器来创建. String x = "abcd"; String y = new String("abcd"); 然而,这两种方式之间的区别是什么?分别应用于哪些情况,之前还不是很懂. 1.双引号的方式 String x = "abcd"; String y = "abcd"; System.out.println(x==y);//true Sys