函数调用的方法一共有4种:
1. 作为个函数调用
2. 函数作为方法调用
3. 使用构造函数调用
4. 作为函数方法调用
作为一个函数调用
// 作为一个函数调用
var name = "windowsName";
function a() {
var name = "Cherry";
console.log(this.name); // windowsName
console.log('inner:' + this); // inner: Window
}
a();
console.log('outer:' + this); // outer: Window
这样一个简单的函数,不属于任何一个对象,就是一个函数,这样的情况在js非严格模式默认是属于全局对象window的,在严格模式,就是undefined。
函数作为方法调用
更多的情况是将函数作为对象的方法使用
var name = "windowsName"
var a = {
name: 'Cherry',
fn: function(){
console.log(this.name); //Cherry
}
}
a.fn();
这里定义一个对象a,对象a有一个属性name和一个方法fn
然后对象 a 通过. 方法调用了其中的fn方法
使用构造函数调用函数
如果函数调用前使用了new关键字,则是调用了构造函数。
这看起来就像创建了新的函数,但实际上js函数是重新创建的对象
// 构造函数
function myFunction(arg1,arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// this creates a new object
var a = new myFunction('Li','Cherry');
a.lastName // 返回'Cherry'
作为函数方法调用函数
在js中,函数是对象。 js函数有它的属性和方法。 call() 和 apply() 是预定义的函数方法。两个方法可用于调用函数,两个方法的第一个参数必须是对象本身 在js严格模式下,在调用函数时第一个参数会成为this的值,即使该参数不是一个对象。 在js非严格模式下,如果第一个参数的值是null或undefined, 它将使用全局对象代替
var name = "windowsName";
function fn() {
var name = 'Cherry';
innerFunction();
function innerFunction() {
console.log(this.name); // windowsName
}
}
fn()
这里的innerFunnction() 的调用属于第一种调用方式: 作为一个函数调用(它是作为一个函数调用的,没有挂载在任何对象上,所有对于没有挂载在任何对象上的函数,在非严格模式下this就是指向window)
浙公网安备 33010602011771号