函数的执行

时间:2021-2-20 作者:admin

匿名函数做递归,使用arguments.callee

let i=0
(function(){
    i++
    if(i<3){
        arguments.callee()
    }
})()

函数执行的三种方法

普通函数:调用这个函数,相当于window对象调用,函数里的this是指向window

作为方法调用:在对象里面的方法中的this是指向这个对象,外部声明的变量相当给window对象添加属性.

obj.say=test
obj.say()   //输出的this指向这个obj对象


test=obj.say
test()    //输出的this指向window对象

作为构造函数调用:构造函数内的this是指向这个构造函数,this是new关键字创建的对象

Person() //this是指向window对象

函数上下文调用模式

函数的三种基本调用模式(基本函数,方法,构造函数)都无法改变this的指向

我们如果想改变this的指向,我们要使用上下文调用模式(call(),apply(),bind())

call()

语法 : 函数名.call(this的指向,参数一,参数二,…)

apply()

函数名.apply(this指向的对象,数组或伪数组) apply()只携带两个参数

bind()

语法:函数名.bind(this的新指向),返回的是一个函数不会自已调用

call(),apply(),bind() 这三个方法是来自Function.prototype上的,所有函数都可以调用改变this的指向

如果传入的参数不是对象

  • 传入(122) this指向Number对象
  • 传入(’dsad’)this指向String对象
  • 传入的是false或true this指向Boolean对象
  • 传入的是undefined、null、空 this指向window
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。