7 JavaScript函数调用&this关键字&全局对象&函数调用&闭包

JavaScript函数有4种调用方式,每种方式的不同之处在于this的初始化

一般而言,在JavaScript中,this指向函数执行时的当前对象

如果函数不属于任何对象,那么默认为全局对象,即HTML页面本身

而浏览器页面对象是浏览器窗口对象,即window对象。此函数会自动变为window对象的函数

因此,从这个层面上来说,myFunction()和window.myFunction()是一样的

function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);           // myFunction(10, 2) 返回 20

 

全局对象:即浏览器窗口,window对象

当函数没有被自身的对象调用时,this的值就会变为全局对象

function myFunction() {
    return this;
}
myFunction();                // 返回 window 对象

 

函数作为方法调用:

创建一个对象,包括两个属性和一个方法,通过调用这个对象来调用方法

<body>
<p id="demo"></p>
<script>
var myObject = {
    firstName : "人散",
    lastName  : "曲终",
    fullName  : function(){
        return this.firstName + " " + this.lastName;
    }
}
    document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>

 

使用构造函数调用函数:

使用new关键字,则调用了构造函数

<body>
<p>该实例中, myFunction 是函数构造函数:</p>
<p id="demo"></p>
<script>
function myFunction(arg1 , arg2){
    this.firstName = arg1;
    this.lastName = arg2;
}
var x = new myFunction("jo","lo");
document.getElementById("demo").innerHTML = x.firstName;
</script>
</body>

 

作为函数方法调用函数:

  • 在JavaScript中,函数就是对象。
  • JavaScript函数作为对象有它的属性和方法。
  • call()和apply()是预定义的函数方法,可用于调用函数,两个方法的第一个参数必须是对象本身。
  • call()和apply()的区别在于第二个参数,call传入的是函数的参数,而apply传入的是一个参数数组。

 

闭包:可以访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。

函数+函数能够访问的自由变量

 

posted @ 2019-09-24 19:41  IslandZzzz  阅读(392)  评论(0编辑  收藏  举报