函数调用模式

函数调用模式(Function Invocation Pattern)

当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的。对于普通的函数调用来说,函数的返回值就是调用表达式的值。

function add ( x, y ){
return x + y;
}
var sum = add( 3, 4);
console.log( sum ) // 7

调用母体

使用函数调用模式调用函数时,非严格模式下,this 被绑定到全局对象;在严格模式下,thisundefined

function add( x, y){
console.log( this );
// window
}
add();
function add(x,y){
'use strict';
console.log(this);
// undefined
}
add();

💡因此,this 可以用来判断当前是否是严格模式

const strict = (function(){
return !this;
}());

重写现象

因为函数调用模式的函数中的 this 绑定到全局对象,所以会发生全局属性被重写的现象。

var a = 0;
function fn(){
this.a = 1;
}
fn();
console.log(this, this.a, a);
// window 1 1