Javascript中函数的四种调用方式

一、Javascript中函数的几个基本知识点:

1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数。

2.函数中有两个特殊的内部属性:arguments和this.

arguments主要是用来保存函数参数,arguments中的callee属性主要是用来指向拥有当前arguments的函数(理解Javascript参数中的arguments对象).

3.在ECMAScript5中规范了另一个函数属性:caller(Opera早期版本不支持,其他版本浏览器都支持),它的作用是保存调用当前函数的函数的引用.

实例:

function outer() {
	inner();
}
function inner() {
	console.log(inner.caller);
}
outer();

测试结果:

为了实现更松散的耦合,在inner()方法中同样可以利用arguments.callee.caller来访问,得到的结果和上面的结果一样.

4.在ECMAScript5中还定义了arguments.caller,它主要是用来区别函数中的caller属性。在非严格模式下,arguments.caller得到的值都是undefined;在严格模式下,下面的三种情况都会报错:

"use strict"
function outer() {
	inner();
}
function inner() {
	//console.log(inner.caller);//报错
	//console.log(arguments.caller);//报错
	//console.log(arguments.callee.caller);//报错
}
outer();

  

5.函数是个对象,因此它有属性和方法:每个函数都包括两个属性:length、prototype.通过函数名直接调用length,可以得到函数形参的个数;prototype是原型属性,每个函数都会有一个原型属性,更多关于原型属性的内容:理解javascript中的原型模式. 每个函数都包含两个非继承来的方法:apply()和call()(apply()和call()的区别).

二、四种调用函数的方式:函数调用模式、方法调用模式、构造器模式、apply\call模式.

1.直接调用函数的方式,this指向的全局对象window.

实例1:

函数声明

function add(a,b) {
	return a+b;
}

console.log(add(1,2));

实例2:

函数表达式

var add=function (a,b) {
	return a+b;
}

console.log(add(1,2));

2.函数作为对象的方法调用,this指向当前的对象.

实例1:

var o = {
	prop: 21,
	f:function() {
		return this.prop;
	}
};

console.log(o.f());

实例2:

var o = {
	prop: 21,
};

function f() {
		return this.prop;
}

o.f = f;
console.log(o.f());//21

3.通过new调用构造器的方式,this指向当前构造函数的原型.

实例1:

返回this对象给o

function MyClass() {
	this.a = 21;
}

var o = new MyClass();
console.log(o.a);//21

实例2:

如果有return,则返回return的结果,如果没有就会返回this。

function MyClass() {
	this.a = 21;
	return {a:22};
}

var o = new MyClass();
console.log(o.a);//22

4.通过apply或call的方式,这两个的第一参数即this,当第一个参数为null,this指向window;当第一个参数为一个对象,this就指向当前这个对象。

时间: 2024-12-11 19:39:35

Javascript中函数的四种调用方式的相关文章

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

javascript中函数的四种调用模式详解

介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已.函数:如果一个函数与任何对象关系,就称该函数为函数.方法:如果一个函数作为一个对象属性存在,我们就称之为方法.接下来就可以开始今天的主体. 1.函数调用模式. 就是通过函数来调用,规范写法为:function fn(){} fn(); 函数中this的指向->window.案例如下: var age = 38; var obj = { age: 18, getAge: function() {

聊聊:Javascript中函数的四种调用模式

在 js 中 无论是函数, 还是方法, 还是事件, 还是构造器, ... 其本质都是函数. 只是处在不同的位子而已. 四种模式有:函数模式,方法模式,构造器模式,上下文模式 1.函数模式 特征: 就是一个简单的函数调用. 函数名的前面没有任何引导内容,其中this表示全局对象,在浏览器中是window. 比如: function foo () {} var func = function () {}; ... foo(); func(); (function (){})(); 2.方法模式 特征

【JS】Js中函数的三种调用方式

在同一个页面中,函数名必须是唯一的,并且区分大小写.Js中可以通过下面三种方式调用函数: 1. 函数的简单调用 2. 在事件的响应中调用函数 3. 通过连接调用函数 具体是怎么操作的呢,下面一一讲解: 函数的简单调用:函数的定义语句通畅被放在HTML文件的<head>内,而函数的调用语句通常被放在<body>中.如果函数定义之前调用函数,执行将会出错. 语法如下: <head> <script type="text/javascript">

js函数的四种调用方式以及对应的this指向

一.函数调用,此时this是全局的也就是window 1 var c=function(){ 2 alert(this==window) 3 } 4 c()//true 二.方法调用 var myObj={ value:2, inc:function(num){ alert(this.value+num); } } myobject.inc(1); //结果3,因为this指向myObj 注意:内部匿名函数不属于当前对象的函数,因此this指向了全局对象window var myObj={ na

JS高级(三)--原型链、闭包、作用域、函数的四种调用方式

一.原型链(家族族谱) 概念:JS里面的对象可能会有父对象,父对象还会有父对象,.....祖先 根本:继承 属性:对象中几乎都会有一个__proto__属性,指向他的父对象 意义:可以实现让该对象访问到父对象中相关属性 根对象:Object.prototype var arr=[1,3,5] arr.__proto__:Array.prototype arr.__proto__.__proto__就是找到了根对象 function Animal(){} var cat=new Animal();

函数的四种调用方式

1.函数模式 function show(){ } show() var show=function(){ } show() 2.方法模式 var obj={ } function show(){ } obj.showFn=show; obj.showFn(); 3.构造函数模式 function personFn(name){ this.name=name; this.showName=function(){ console.log('名字为'+this.name) } } var perso

函数的四种调用模式

函数的四种调用模式 1.函数模式 特征 就是一个简单的函数调用,函数名前面没有任何的引导内容 this含义 this在函数模式中表示全局对象,在浏览器中是windjow对象 2.方法模式 特征 方法一定是依附与一个对象,将函数赋值给对象的一个属性,那么就成为了方法 this含义 this在方法模式调用中表示所依附的这个对象 3.构造器调用模式 与方法模式的this的区别 由于构造函数知识给this添加成员,没有做其他事情,而方法也可以完成这个操作,就this而言,构造函数与方法没有本质区别 特征

同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:   同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事.   例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个