博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数调用拾遗
阅读量:6592 次
发布时间:2019-06-24

本文共 1492 字,大约阅读时间需要 4 分钟。

函数调用总结

通常构成函数主题的JS代码在定义之时是不会被执行的,只有在调用函数是才会被执行

有4种方式可以调用JS函数

函数调用

//定义函数 factorialfunction factorial(){    if(x <= 1) return 1;    return x * factorial(x-1);}var probability = factorial(5)

以函数形式调用的函数通常不适用this关键字

方法调用

方法调用和函数调用区别在于:调用上下文。

如果有一个 函数 f 和 对象 o
给o定义一个m()的方法

o.m = f

给对象o定义方法m(),调用时就像这样

o.m()

其中o就成为调用上下文,函数体可以使用关键字this引用该对象

一个具体的例子:

var calculator = {    operand1:1;    operand2:2;    add:function(){        this.result = this.operand1+this.operand2;    }};calculator.add();//方法调用1+1的结果calculate.result // => 2

this关键字

关键字this和变量不同,没有作用域的限制,嵌套的函数不会从调用他的函数中继承this

如果嵌套函数作为方法调用,this值指向调用它的对象。
如果嵌套函数作为函数调用,this指向全局对象或undefined
很多人误认为调用嵌套函数时this会指向调用外层函数的上下文。
如果你想这个外部函数的this值时,需要将this值保存在一个变量里,这个变量和内部函数都在同一作用域内。

var o = {    m:function(){ //对象中的m()方法        var self = this;//保存this值        console.log(this === o);//true,this就是这个对象o        f(); //调用辅助函数f()                function f(){            console.log(this === o);//false,this的值是全局对象或undefined            console.log(this === o);//true,self指外部函数的this值        }    }};

构造函数调用

构造函数调用与函数调用、方法调用在实参处理,调用上下文和返回值方面都有不同。

构造函数调用在圆括号里包含实参列表,则先计算实参表达式,这与函数调用和方法调用是一致的。

如果构造函数没有形参,JS构造函数调用语法是可以省略()的

var o = new Object();var o = new Object;//等价

构造函数调用创建一个空对象,继承自构造函数prototype属性,构造函数试图初始这个新创建的对象,作为其调用的上下文,因此,构造函数可以使用this来引用这个新创建的对象。

构造函数通常不使用return,当执行完函数体后,会显示返回。

间接调用

JS函数也是对象,自然也有方法。

其中call(),apply()可以用来间接调用函数。这两个方法都支持显式调用所需this值

我们可以将call(),apply()看作某个对象的方法,通过调用方法的形式来简介调用。

call和apply的第一个实参是要调用的函数的母对象,他是调用上下文,在函数体内可以通过this来获得引用。

转载地址:http://bkuio.baihongyu.com/

你可能感兴趣的文章
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能...
查看>>
vue1.0 的过滤器
查看>>
如何删除anaconda
查看>>
Mybatis3.3——源码阅读笔记
查看>>
oracle中的trunc函数操作
查看>>
杂牌蓝牙在2003系统使用新驱动的破解方法!
查看>>
EventCache表太大, 怎么办?
查看>>
Top 10 mistakes in Eclipse Plug-in Development
查看>>
Directx教程(23) 简单的光照模型(2)
查看>>
使用sphinx来创建文档
查看>>
[转]用了docker是否还有必要使用openstack?
查看>>
Java 并发性和多线程
查看>>
IE6下frameset横向滚动条BUG
查看>>
命令查看java的class字节码文件
查看>>
软件下载链接获取方法
查看>>
Oracle 的一个非常好的触发器例子
查看>>
Python线程专题9:线程终止与挂起、实用工具函数
查看>>
HTTP协议入门
查看>>
Python学习之路17-Django入门
查看>>
MySQL Optimization 优化原理
查看>>