JavaScript中具名函数的多种调用方式总结

前面有一篇提到了 匿名函数的多种调用方式。这篇看看具名函数的多种调用方式。

1、() 

平时最常用的就是()运算符来调用/执行一个函数:

代码如下:

// 无参函数fun1
function fun1() {
    alert('我被调用了');
}
fun1();
 
// 有参函数fun2
function fun2(param) {
    alert(param);
}
fun2('我被调用了');

ECMAScript3后加入给Function加入了call和apply后,就有了下面两种。

2、call

代码如下:

// 无参函数fun1
function fun1() {
    alert('我被调用了');
}
fun1.call(null);
 
// 有参函数fun2
function fun2(param) {
    alert(param);
}
fun2.call(null,'我被调用了')

3、apply

代码如下:

// 无参函数fun1
function fun1() {
    alert('我被调用了');
}
fun1.apply(null);
 
// 有参函数fun2
function fun2(param) {
    alert(param);
}
fun2.apply(null,['我被调用了'])

虽然call,apply可以纯粹的用来调用/执行函数,但它们更多是用来改变函数执行的上下文。

4、new (不推荐使用这种方式哦 )

代码如下:

// 无参函数fun1
function fun1() {
    alert('我被调用了');
}
new fun1();
 
// 有参函数fun2
function fun2(param) {
    alert(param);
}
new fun2('我被调用了')

new的本质是用来创建/构造一个类的实例,这里定义的fun1,fun2明显不是一个类(没有this,没有prototype)。但两个函数确实执行了。这是new的副作用。

从以上调用方式上看四种方式执行结果没有区别。但如果函数有返回值的话,用new方式调用时可能会让你有些失望。

代码如下:

// 有返回值的函数fun
function fun() {
    alert('我被调用了');
    return "jack";
}
var c = new fun();
alert(c);//[object Object],为什么不是"jack"?

改成这样

代码如下:

// 有返回值的函数fun
function fun() {
    alert('我被调用了');
    return {name:'jack'};
}
var c = new fun();
alert(c.name); //jack,又正常返回了

总结下:用new方式调用函数时。如果存在返回值,当返回值是JavaScript的内置类型(基本类型)如字符串(String),数字(Number),布尔(Boolean)等时,将不会返回该值;当返回值是对象,函数,数组等对象类型时,将直接返回该对象,函数,数组。

当返回值是内置类型(基本类型)时,new fun()到底返回什么呢?下一篇将讨论new方式调用的细节。

(0)

相关推荐

  • Javascript中匿名函数的多种调用方式总结

    Javascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被调用. 方式1,调用函数,得到返回值.强制运算符使函数调用执行 复制代码 代码如下: (function(x,y){     alert(x+y);     return x+y; }(3,4)); 方式2,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用再去调用执行 复制代码 代码如

  • javascript 具名函数的四种调用方式 推荐第1/3页

    1.()小括号运算符 平时最常用的就是()运算符来调用一个函数 复制代码 代码如下: //无参函数fun1 function fun1() { alert('我被调用了'); } fun1() //有参函数fun2 function fun2(param) { alert(param); } fun2('我被调用了') ECMAScript3后加入给Function加入了call和apply后,就有了下面两种 2.call 复制代码 代码如下: //无参函数fun1 function fun1(

  • JavaScript中具名函数的多种调用方式总结

    前面有一篇提到了 匿名函数的多种调用方式.这篇看看具名函数的多种调用方式. 1.()  平时最常用的就是()运算符来调用/执行一个函数: 复制代码 代码如下: // 无参函数fun1 function fun1() {     alert('我被调用了'); } fun1();   // 有参函数fun2 function fun2(param) {     alert(param); } fun2('我被调用了'); ECMAScript3后加入给Function加入了call和apply后,

  • JavaScript中匿名函数的递归调用

    不管是什么编程语言,相信稍微写过几行代码的同学,对递归都不会陌生. 以一个简单的阶乘计算为例: function factorial(n) { if (n <= 1) { return 1; } else { return n * factorial(n-1); } } 我们可以看出,递归就是在函数内部调用对自身的调用. 那么问题来了,我们知道在Javascript中,有一类函数叫做匿名函数,没有名称,怎么调用呢?当然你可以说,可以把匿名函数赋值给一个常量: const factorial =

  • Javascript中匿名函数的调用与写法实例详解(多种)

    Javascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被调用. 方式1,调用函数,得到返回值.强制运算符使函数调用执行 (function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用再去调用执行 (function(x,y){ alert(x+y);

  • JavaScript 中的输出数据多种方式

    前言 在 JavaScript 中,不像 Java 等语言,它没有任何打印或者输出方法的,通常使用如下 4 种方式来输出数据. 使用 window.alert() 用于弹出警告框 使用 document.write() 将内容写入到 HTML 文档中 使用 innerHTML 写入到 HTML 元素 使用 console.log() 写入到浏览器的控制台 以下分别使用它们来展示一个实例. window.alert() 新建一个 HTML 文件,然后用 VSCode 写入如下代码. <!DOCTY

  • JavaScript中的函数的两种定义方式和函数变量赋值

    复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /*I总结: 1.函数名可以做变量使用,可以赋值,可以传值 2.函数名当参数,传递给另一个函数 */ //===========

  • 浅谈Javascript中的函数、this以及原型

    关于函数 在Javascript中函数实际上就是一个对象,具有引用类型的特征,所以你可以将函数直接传递给变量,这个变量将表示指向函数"对象"的指针,例如: function test(message){ alert(message); } var f = test; f('hello world'); 你也可以直接将函数申明赋值给变量: var f = function(message){ alert(message); }; f('hello world'); 在这种情况下,函数申明

  • 谈谈JavaScript中的函数与闭包

    闭包这东西,说难也难,说不难也不难,下面我就以自己的理解来说一下闭包 一.闭包的解释说明 对于函数式语言来说,函数可以保存内部的数据状态.对于像C#这种编译型命令式语言来说,由于代码总是在代码段中执行,而代码段是只读的,因此函数中的数据只能是静态数据.函数内部的局部变量存放在栈上,在函数执行结束以后,所占用的栈被释放,因此局部变量是不能保存的. Javascript采用词法作用域,函数的执行依赖于变量作用域,这个作用域是在定义函数时确定的.因此Javascript中函数对象不仅保存代码逻辑,还必

  • 简单分析javascript中的函数

    在脚本语言JavaScript中,函数的定义是由事件驱动或者当它被调用时可重复使用的代码块.在JavaScript的标准ECMAscript中,把函数表述为可以随时随地运行的语句.我个人是不认同ECMA的说法的,因为函数只有在发生调用的时候才会执行,否则就是一段毫无生气的代码. 我们来具体认识认识函数. (一)首先是函数的定义: 在ECMAscript函数的定义是 关键字function 函数名( 参数){主体:return(返回值)};这四部分组成的,但是在脚本语言中函数的定义却分为三种方式定

  • 深入认识JavaScript中的函数

    概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-} var func2=function(-){-}; var func3=function func4(-){-}; var func5=new Functio

随机推荐